Jump to content

Recently Updated Topics

Showing topics posted in for the last 7 days.

This stream auto-updates

  1. Today
  2. This is the source code at the bottom of the frontend page: <script src="/site/assets/aiom/js_418c8cd8c559810255e3250d05446d9c.js" async defer></script><script>var emo = emo || {}; emo.key = '.C1vql2a5RcPeJomwFrx7puhYLKgINntH0s9WZbAMiyDOXjE6TVS8GkB_1111Qfz';</script><link rel="stylesheet" href="/site/assets/aiom/css_6b89ca87ab7d885667358c0a046f5836.css"><link rel="stylesheet" href="/site/assets/aiom/css_1111a5003457ed863af5db2e9421e88.css"><script type="text/javascript" src="/site/assets/aiom/js_b363b432e18b7d69fccac9f9ef11116d.js"></script><div id="adminbar" data-adminbar='{"classes":{"link--modal":"adminbar__link--modal"},"urls":{"modules":"\/wire\/modules\/"}}' class="adminbar adminbar--auto-padding"><ul class="adminbar__list adminbar__list--left"><li class="adminbar__list-item adminbar__list-item--item-logo"><a class="adminbar__logo" href="/pwbackend/"><img class="adminbar__logo-img" src="/wire/modules/AdminTheme/AdminThemeUikit/uikit-pw/images/pw-mark.png" alt="" /></a></li><li class="adminbar__list-item adminbar__list-item--item-browse adminbar__list-item--active"><a class="adminbar__link adminbar__link--item-browse" href="#"><svg class="adminbar__icon" aria-hidden="true" width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z" fill="#fff"/></svg>Ansicht</a></li><li class="adminbar__list-item adminbar__list-item--item-edit"><a class="adminbar__link adminbar__link--item-edit adminbar__link--modal" href="/pwbackend/page/edit/?id=8305&modal=1&ab_modal=1"><svg class="adminbar__icon" aria-hidden="true" width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z" fill="#fff"/></svg>Bearbeiten</a></li><li class="adminbar__list-item adminbar__list-item--item-new"><a class="adminbar__link adminbar__link--item-new adminbar__link--modal" href="/pwbackend/page/add/?parent_id=8305&modal=1&ab_modal=1"><svg class="adminbar__icon" aria-hidden="true" width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1344 960v-128q0-26-19-45t-45-19h-256v-256q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v256h-256q-26 0-45 19t-19 45v128q0 26 19 45t45 19h256v256q0 26 19 45t45 19h128q26 0 45-19t19-45v-256h256q26 0 45-19t19-45zm320-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg>Neu </a></li></ul><ul class="adminbar__list adminbar__list--right"><li class="adminbar__list-item adminbar__list-item--item-admin"><a class="adminbar__link adminbar__link--item-admin" href="/pwbackend/page/?open=8305"><svg class="adminbar__icon" aria-hidden="true" width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1152 896q0-106-75-181t-181-75-181 75-75 181 75 181 181 75 181-75 75-181zm512-109v222q0 12-8 23t-20 13l-185 28q-19 54-39 91 35 50 107 138 10 12 10 25t-9 23q-27 37-99 108t-94 71q-12 0-26-9l-138-108q-44 23-91 38-16 136-29 186-7 28-36 28h-222q-14 0-24.5-8.5t-11.5-21.5l-28-184q-49-16-90-37l-141 107q-10 9-25 9-14 0-25-11-126-114-165-168-7-10-7-23 0-12 8-23 15-21 51-66.5t54-70.5q-27-50-41-99l-183-27q-13-2-21-12.5t-8-23.5v-222q0-12 8-23t19-13l186-28q14-46 39-92-40-57-107-138-10-12-10-24 0-10 9-23 26-36 98.5-107.5t94.5-71.5q13 0 26 10l138 107q44-23 91-38 16-136 29-186 7-28 36-28h222q14 0 24.5 8.5t11.5 21.5l28 184q49 16 90 37l142-107q9-9 24-9 13 0 25 10 129 119 165 170 7 8 7 22 0 12-8 23-15 21-51 66.5t-54 70.5q26 50 41 98l183 28q13 2 21 12.5t8 23.5z" fill="#fff"/></svg>Backend</a></li><li class="adminbar__list-item adminbar__list-item--item-logout"><span class="adminbar__html adminbar__html--item-logout"><form class="adminbar__form" action="/pwbackend/login/logout/"><button class="adminbar__button" type="submit"><svg class="adminbar__icon" aria-hidden="true" width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 896q0 156-61 298t-164 245-245 164-298 61-298-61-245-164-164-245-61-298q0-182 80.5-343t226.5-270q43-32 95.5-25t83.5 50q32 42 24.5 94.5t-49.5 84.5q-98 74-151.5 181t-53.5 228q0 104 40.5 198.5t109.5 163.5 163.5 109.5 198.5 40.5 198.5-40.5 163.5-109.5 109.5-163.5 40.5-198.5q0-121-53.5-228t-151.5-181q-42-32-49.5-84.5t24.5-94.5q31-43 84-50t95 25q146 109 226.5 270t80.5 343zm-640-768v640q0 52-38 90t-90 38-90-38-38-90v-640q0-52 38-90t90-38 90 38 38 90z" fill="#fff"/></svg>Ausloggen</button></form></span></li></ul></div></body></html> <!-- Generated: Fri, 15 May 2026 16:43:44 +0200 // Powered by AIOM+ v4.1.0 --> And this is what the top of the frontend looks like while you're logged out: When I click "Empty cache," the frontend looks normal again and the admin bar disappears.
  3. Hi everyone SEO NEO is ready if anyone is available for early testing. I have been testing on a fictional purpose-built site to stress-test multilingual content, URL segments and a heap more. If you'd like to try it on your next real PW build, please DM me, and then we'll work quickly towards the general release and availability via PW modules and GitHub. Cheers, and have a great weekend 🙂 P
  4. Hey Brendon This took me back. When I first started freelancing, I distinctly remember a period where I felt the same. It was impossible to keep up, know everything, have time to stay current and be in a relationship. And for a brief while, I was trying my best to do all those things. Two revelations really helped me relax and enjoy life and stop stressing. 1. A friend reminded me that my relationships were more important than my work 2. I realised the most important challenge is knowing what I don't need to know So, to clarify number 2, it was a case of switching from: I need to know Adobe Flash, Actionscript 1, HTML and CSS, PHP (3), JS, Dreamweaver etc etc etc to I don't need to be an expert in all these fields. I just need to know how to solve the client projects in front of me. If I don't know something at the time, I'll learn, buy a book or suggest an alternative. So I hope that helps. I notice you're looking for a system to cram it all in, but the thing that actually helped me was accepting I couldn't (and didn't need to). So don't sweat. It's funny because lately I had to remind myself of my 2000 AD self. I began to feel with AI and AI Development that there's no way I can keep up. I've been bookmarking 50 pages a day (but reading none) and can occasionally feel burnout approaching. So I'm going to relearn to calm down a bit, because that girlfriend from 25 years ago is now my wife, I have a good freelance business, and the most important things are relationships, health and peace of mind. Everything else is a bonus and worth chasing, but not at the expense of the fundamentals. Also, you mention your friend's life, but you're measuring yourself against someone you're painting as superhuman. That could easily be a confidence and happiness killer right there, and unlikely to be helpful.
  5. Many thanks @Ivan Gretsky.
  6. Can you provide more info? You edit some css file and want to insert "overflow:hidden" and then happens what?
  7. Yesterday
  8. I have quite a quite large template having 57 fields. Now the saving of a page with that template takes over a minute on the production server. The server is a shared webhotel server with PHP 8.2. On my own vps server the saving takes under 3 seconds. Tracy shows in the timers for the last save stage, the redirect to ?id=222&s=1&c=0, 1,2 seconds time. But the Execution time for this in System info is 1400 ms. Where can I see what causes the one minute delay? I can't find the point in Tracy panels to debug more.
  9. Thank you for your reply. That puts my mind at rest, I'll just sync the times in my local config.php as you suggest.
  10. Hi everyone, Every site I've launched eventually had a database incident — corrupted table, failed migration, bad deploy. Having a reliable backup system that runs automatically and stores offsite is non-negotiable. This module is what I use in production. GitHub: https://github.com/mxmsmnv/ProcessDbBackup What it does: Three independent backup types — Regular, Weekly, Monthly — each with its own LazyCron schedule and retention count Admin home widget — shows status (🟢 OK / 🟡 Outdated / 🔴 No backups) per type with "Create now" buttons Backblaze B2 upload — optional offsite storage after every backup, keep or delete local copy Chunked upload — upload .sql.gz from your computer in 2MB chunks, bypasses upload_max_filesize entirely Streaming restore — reads .gz line-by-line, flat memory usage regardless of dump size Partial restore — select individual tables from a backup Pre-restore auto-backup — safety backup of current DB before any restore Backup integrity verification — gzip check + SQL structure validation Lock file — prevents concurrent backup processes Exclude tables — skip cache, sessions etc. from all backups Storage protected with .htaccess deny-all Backup methods: mysqldump (preferred, InnoDB-safe hot backup) with PHP PDO fallback. Restore via mysql CLI with PHP PDO streaming fallback. Requirements: ProcessWire 3.0+, PHP 8.0+, zlib, PDO. mysqldump/mysql CLI optional but recommended for large databases. MIT License.
      • 10
      • Like
      • Thanks
  11. Last week
  12. Hmm, not the best solution. 😅 I've tried it about 30 times already today.
  13. Those "top bar features" are welcome, and so are the "library and inputfield" additions/changes. Thanks @Peter Knight!
  14. Thanks, @millipedia. I used Audio Embed Textformatter in the past, in another site, together with Video Embed and so on (pdf, etc.). But it would be much simpler and more elegant to use a universal "insert media..." in TinyMCE. As a last resource, while I wait for a uniform solution, I'm using a Hanna code to embed the audio without forcing the person who is editing to deal with code. But I'm not completely satisfied with this partial solution, I confess.
  15. I assume you want those other RM types that should not be editable by the user with the given role still to be shown in admin, but with all their fields being disabled. The best way to achieve this is via hooks. Look here or search for similar topics for inspiration. Check RestrictRepeaterMatrix's source code for another example. You need to get the InputfieldRepeaterMatrix field at some point (maybe after the renderReadyHook method), foreach through the blocks and change their fields' output based on your conditions. Sorry for no ready-to-copy-and-paste code))
  16. Update: Custom Option – v 1.1.0 A while back, a kind soul forked this module to add Polish quotation marks. Small plot twist: Polish primary quotes are typographically identical to German ones („...“) – so the fork mostly added the word "Polish" to the dropdown. Hats off to the spirit, though. 🇵🇱🇩🇪 Taking the hint, we've now added a Custom option: pick it in the module config and you get two extra text fields where you define your own opening and closing characters. No more forking required when none of the presets fit — Polish, Klingon, or otherwise. 😉 Cheers, Mike
  17. [manual] Sync "TracyDebugger" branch "master": 1121 remote, 987 local, 0 to update, 0 to delete (134 preserved via .gitignore/.gitattributes) Yep. Thanks for quick fix!
  18. Hi Nomak, thanks for posting — this sounds like an interesting project. I'm Robert, a web developer based in Düsseldorf, Germany, doing both frontend and backend development. My frontend stack normally includes HTML, CSS (SASS/PostCSS), JavaScript (Alpine.js, htmx or Vue if needed), focusing on fully responsive (fluid) and accessible results. You can get a first impression of my work at robertweiss.de. I'm located in Germany and hold a valid EU VAT ID, so there would be no issues on the tax and legal side. I'd be happy to hear more about the project scope — for instance the size and complexity of the design, the number of templates/elements involved, and any specific interactions or animations expected. Knowing the budget you have in mind would also help me figure out if this could be a good fit for both of us. Looking forward to hearing from you! Best regards, Robert
  19. psy

    LoginPassKey

    LoginPassKey has undergone some changes. Latest version is 0.3.1 available at https://github.com/clipmagic/LoginPassKey As well as some 'under the hood' security upgrades, you can now login without entering a username/email. Simply click the 'Login with PassKey' button and if all the checks pass, you're automatically logged into either the admin area, or the frontend via LoginRegisterPro depending on your config/setup. A full list of the changes available at https://github.com/clipmagic/LoginPassKey/blob/main/CHANGELOG.md
  20. Another heads up for folks. It's not a PW bug but maybe could be considered a deprecation. I started getting this error: # ProcessWire\\WireException: Unknown column name(s) for findRaw: date_format.id in /wire/core/Pages/PagesRaw/PagesRaw.php:1816 ```php 1813 | protected function unknownFieldsException(array $fieldNames, $context = '') { 1814 | if($context) $context = " $context"; 1815 | $s = "Unknown$context name(s) for findRaw: " . implode(', ', $fieldNames); ► 1816 | throw new WireException($s); 1817 | } 1818 | } ``` The issue is that I had a table field (date_format) and a findRaw() that tried to load this array of fields: ['id','format','countries'] However table fields have no "id" field. In previous versions of PW this was silently ignored, but now the refactor of PagesRaw into wire/core/Pages/PagesRaw/ added strict column validation in findCustomField(), resulting in that exception. Hope that helps someone!
  21. I just did, but still waiting for approval. Cheers R
  22. Some additional thoughts on using AI for PAGEGRID development: https://page-grid.com/blog/ai-as-a-tool-not-a-replacement/
  23. StripePaymentLinks 1.2.0 — Electronic withdrawal for B2C distance contracts Hi all, just shipped new version of StripePaymentLinks, which adds a complete electronic right-of-withdrawal flow for online merchants. Why now EU Directive 2023/2673 (amending the Consumer Rights Directive 2011/83/EU) requires every online trader selling to EU consumers — goods, services, or digital products — to provide an easily accessible "withdrawal button" by 19 June 2026. Member states had to transpose the directive into national law by 19 December 2025; Austria's FAGG amendment is one of the implementations now landing. The guiding principle: withdrawing from a contract must not be more burdensome than concluding it. This module ships an electronic withdrawal flow that satisfies that principle, with all legal wording editable per site so it works under any national transposition. What's new Withdrawal modal on every frontend page — Bootstrap 5 modal with form → confirmation → success steps. Renders only when invoked (link or ?withdraw=1 URL parameter); zero overhead otherwise. Per-user withdrawal log — every submission is stored in a repeater on the user template (spl_withdrawals) with timestamp, products affected, salted HMAC-SHA256 IP hash, and a status field that the merchant can update from the backend. Two-mail flow — the customer gets a confirmation of the withdrawal, the merchant gets an internal notification with a direct link to the user profile. Both go through the existing universal mail layout. Order-confirmation mail now includes a consumer-rights block — auto-injected for every purchase, with two outcomes depending on the product: Right of withdrawal applies → withdrawal instructions are rendered. Right has been waived (e.g. immediate digital delivery with explicit consent) → waiver acknowledgement is rendered. Site-editable legal text — two TinyMCE config fields (mailWithdrawalText, mailWaiverText) let each site operator write the exact legal wording their jurisdiction requires. Placeholder system including {products}, {provider}, {contact_email}, {order_id}, {order_date}, {name}, {email}, {today} and — for the TinyMCE editor — anchor-pair placeholders that survive the editor's href-stripping: {withdrawal_mail}TEXT{withdrawal_mail_end} → expands to a prefilled mailto: link (subject + body from translatable defaults) {withdrawal_online}TEXT{withdrawal_online_end} → expands to a ?withdraw=1 deeplink that auto-opens the modal Built-in protection — honeypot field, per-IP rate-limit, server-side CSRF, deliverability headers (Auto-Submitted, X-Auto-Response-Suppress, proper Reply-To). Setup is a few field saves ... In the module config there's a new Withdrawal fieldset with five fields: Internal notification email (falls back to $config->adminEmail) Contact email shown in the form (falls back to sender email) Privacy policy page (page-select) Withdrawal text — right of withdrawal applies (TinyMCE) Waiver text — right of withdrawal does not apply (TinyMCE) The module creates all required fields, the spl_withdrawals repeater and status options on first save / module upgrade — fully idempotent. ... and adding the trigger link to your templates The withdrawal modal is auto-injected on every frontend page — you only need to render a link to open it. The module ships a helper for that: echo $modules->get('StripePaymentLinks')->renderWithdrawalLink(); That gives you the legally required, always-visible withdrawal entry point. Typical place: site footer or account menu. The helper takes two optional arguments — a CSS class and a custom label — so it adapts to whatever markup your theme uses: echo $modules->get('StripePaymentLinks')->renderWithdrawalLink('nav-link fw-bold'); echo $modules->get('StripePaymentLinks')->renderWithdrawalLink('', 'WITHDRAW'); Anything that links to your site root with ?withdraw=1 also auto-opens the modal — useful for putting a direct withdrawal link inside order-confirmation mails, transactional notifications, or PDF receipts. That's the whole frontend integration — one helper call, no JavaScript wiring, no modal HTML in your templates. Translatable All UI strings (modal labels, mail subjects/bodies, status names) are PW-translatable. Happy to hear feedback, edge cases, or implementation experiences from other EU jurisdictions. Cheers, Mike
  24. @maximus The ProcessWire Upgrade module currently suggests your module as an update for existing Pages2Pdf installations. Some of my clients have "just clicked update," which immediately broke their PDF generation. To prevent further broken production sites and support overhead for other developers, could you please consider renaming your module to something unique (e.g., MaxWirePDF or PdfEngine)?
  25. Hi all, Does anybody notice this with 3.0.260? It happens when wire folder in the root installation folder is a symlink to other folder. Gideon
  26. Honestly, you’ve got everything you need with just the files and a database dump. I’ve done this exact migration a few times, and ProcessWire is actually one of the easiest CMSs to move because it doesn’t hardcode paths in the DB. Just upload your files to the Ubuntu server, import the SQL via phpMyAdmin or CLI, and update your /site/config.php with the new database credentials. The only real "gotcha" is usually file permissions or missing .htaccess—make sure mod_rewrite is enabled on the new Ubuntu box and double-check that your /assets/ folders are writable by the server, otherwise your images won't render. You definitely don't need a fresh install first; just "drop and swap" works fine.
  27. Hey! Yeah, that's a classic snag with ProcessWire's Repeater Matrix. The ->type property actually returns the "name" (slug) of the type, but ->label isn't a direct property of the item itself. To grab the human-readable label, you have to pull it from the field's definition. You can do it like this: PHP $label = $item->getRepeaterMatrixType()->label; echo $label; Essentially, $item->getRepeaterMatrixType() returns the actual type object, which contains all those extra details like the label, icon, and description. Super handy if you're building out a custom page builder and want the UI to match the backend!
  28. Hi all, SYMPTOM When creating or editing a page with Chinese characters in the page name (e.g., 關於我們) while $config->pageNameCharset = "UTF8" and $config->pageNameWhitelist = "" (empty), a fatal error occurs: Fatal Error: Uncaught ValueError: idn_to_ascii(): Argument #1 ($domain) must not be empty in Sanitizer.php:1138 Environment PHP 8.4 ProcessWire 2.6.260 I create an bug report in github https://github.com/processwire/processwire-issues/issues/2215 By the help of AI, I found the root cause. 1. The pageNameHasConflict() method in PagesNames.php calls $sanitizer->pageName($name, Sanitizer::toAscii) to convert the UTF-8 name to ASCII for duplicate name checking. 2. Sanitizer::pageName() triggers punyEncodeName() to encode the Chinese characters using Punycode. 3. Inside punyEncodeName() (line 1085), when $version > 1, each character of the name is checked against $config->pageNameWhitelist. 4. When pageNameWhitelist is empty (""), every Chinese character fails the whitelist check and gets replaced with "-" (hyphen). 5. After collapsing consecutive hyphens and trimming leading/trailing hyphens, the result is an EMPTY STRING "". 6. The empty string is then passed to PHP's idn_to_ascii() function (line 1158), which throws ValueError because it requires a non-empty $domain argument. Gideon
  1. Load more activity
×
×
  • Create New...