All Activity
- Today
-
I think the error message is pretty straightforward in this case: "Array and string offset access syntax with curly braces is no longer supported" On line 3899 from your excerpt, a variable called "str" (which I assume holds a String value), is extracting an offset using curly braces, something that much older versions of PHP supported, but has been deprecated for awhile now. How old is the ProcessWire version that you are using? From checking Github and looking at my own sites, the MarkupHTMLPurifier module is currently at version 4.9.7, is included in the core so does not need to be installed separately, and hasn't been updated in over 4 years (the Markdown README was updated 2 years ago). If you upgraded the module separate from the rest of the core, it's entirely possible that there are incompatibilities due to not all core modules being updated simultaneously, thus the problem(s) you're experiencing with text in a textarea field.
-
BFD Calendar started following HTMLPurifier error
-
Since updating MarkupHTMLPurifier (1.0.3) I get an error when puttng text in a textarea field: Compile Error Array and string offset access syntax with curly braces is no longer supported 3889: // codepoints. Instead of having to convert back into UTF-8, we've 3890: // decided to directly append valid UTF-8 characters onto a string 3891: // $out once they're done. $char accumulates raw bytes, while $mUcs4 3892: // turns into the Unicode code point, so there's some redundancy. 3893: 3894: $out = ''; 3895: $char = ''; 3896: 3897: $len = strlen($str); 3898: for ($i = 0; $i < $len; $i++) { 3899: $in = ord($str{$i}); 3900: $char .= $str[$i]; // append byte to char 3901: if (0 == $mState) { 3902: // When mState is zero we expect either a US-ASCII character 3903: // or a multi-octet sequence. It also happens when I edit the field in previous pages. What could be causing this?
-
@eelkenet Thanks, I'm adding your suggestion to our README to accompany the other example(s).
-
PW 3.0.265 – Core updates and AgentTools updates
ryan replied to ryan's topic in News & Announcements
@AndZyk It's been requested by another person and I was just waiting for someone else to ask for it. I've added a setting (in tomorrow's version) that let's you choose where you want the response to appear: notification, in the field, or both. In my case, I need the "both" option because my PageEngineer fields are pretty far down on the page. If there's no notification, the person editing sometimes misses the response. And if it doesn't appear in the PageEditor field, then you don't see what you are replying to. But now you can choose what works best for your case. I agree, tomorrow's version will also repeat the prompt above the response. Maybe for a future version. Right now PageEngineer is a Fieldtype using an Inputfield that's part of the page editor form, and that gives you the flexibility of putting it where you want it. The current setup means you could always present it as its own tab in the page editor too. But I do like your idea as a potential option for a future version. I found that some of these requests can take quite awhile to complete and something more than a spinner was needed to communicate what was happening. I asked Codex to come up with a spinner that better represented the thinking process that takes place when you submit an engineer request, and I was pleasantly surprised by the result. Like anything else, if some people don't like it we could always make it optional. It's possible, but it depends on the Inputfield supporting it. Most core ones do, but at this point I prefer predictable reliability, aiming for stuff that will work everywhere. As the AgentTools module matures maybe more options like this can be available. Not all models support image files, though I think most of the big ones do. Likely we'll add this at least to the site engineer. Maybe for page engineer too, though you could do it now just by adding a file field to the page and telling page engineer to use it, whether in a prompt, or in the system prompt defined with the page engineer field. -
Thanks for sharing! I have not yet installed Agent Tools, but will surely start using it. And since I am also a MAMP Pro user, I am glad you saved me some troubleshooting time!
-
It seems I had completely missed the part in the documentation regarding the Apache timeouts which finally led me in the right direction. However, the way to correct these did not match my MAMP Pro set-up. In MAMP Pro, Templates are used for files like httpd.conf. MAMP then merges these into a live, read-only httpd.conf file that Apache uses. In order to get this working, I had to edit the Apache template (File → Open Template → Apache → httpd.conf), and change the placeholder MAMP_FastCgiServer_MAMP into MAMP_FastCgiServer_MAMP -idle-timeout 300 This made sure that in the compiled httpd.conf the timeout was set correctly.
-
module Native Analytics — a native analytics module for ProcessWire
Roych replied to Roych's topic in Module/Plugin Development
NativeAnalytics 1.0.29 is out This release polishes the recent contributions from @adrian and fixes a few edge cases: Hourly trend chart now live-updates the current hour (previously it could update the last slot of the day). "Find page" autocomplete now suggests only real pages with recorded data — bot rows and 404 probes are excluded. Page search no longer fails on environments without mbstring. Uninstalling only the dashboard module is now non-destructive — it won't remove the main module or drop your analytics tables. Full data removal still happens when you uninstall the main NativeAnalytics module. And anwser to @millipedia No step missing on your side — this was a bug. The tracking endpoint (/pwna-track/) was being recorded as the pageview path on some setups (subdir/proxy/trailing-slash), so every session showed it. Fixed in 1.0.29 release: the endpoint paths are now hard-excluded from being stored. Thanks R -
I think I just moved to this one because it has touch ID and USB charging. I'm sure the numeric keyboards now have all those, but I couldn't go back. My mouse position Vs edge of keyboard has been re-established.
-
I have to type in quite a few numbers a day, its just more convenient for me.
-
It was nice until my wife arrived home and the monitor was promptly relocated off the kitchen table 😂 Re. numeric keypad. Is that because you are a proper developer? Using them mainly for coding?
-
Nice view you got there. But I could never ever work on a keyboard without a numeric keypad 😉
-
Peter Knight started following A brand new day
-
Wake up. Work with ProcessWire. Drink coffee. Repeat. Anyone else wonder how they got so lucky to be able to work with ProcessWire every day? 🤗 I often wonder if developers on other systems feel the same. What are you working on today?
-
Please do 🙂. I can’t guarantee everything is flawless at this early stage but I can guarantee speedy fixes. LMK where you can see areas for improvement. P
-
PW 3.0.265 – Core updates and AgentTools updates
wbmnfktr replied to ryan's topic in News & Announcements
-
It's now possible to run multiple scripts in different Console tabs at the same time. Probably not something you'll need often, but if you have a very long running one you can run other ones in other tabs at the same time without needing to wait.
-
PW 3.0.265 – Core updates and AgentTools updates
Jonathan Lahijani replied to ryan's topic in News & Announcements
It's more like entering the mind of Zach Galifianakis I'd prefer the matrix. - Yesterday
-
wbmnfktr started following SEO Neo - 1.1.3 available
-
I.NEED.TO.TRY.THIS! Congrats on this module. It looks/reads awesome. Read through more details on Github and I'm in love. Need to try out how this plays out in a real project and how steep the learning curve is but... [chefskiss-emoji.gif]
-
SEO Neo feature focus: SERP Preview The SERP Preview has two useful tab groups. Live Google SERP preview with desktop/mobile toggle. Multilingual language switching is also possible. The tab group is auto-generated based on your installed languages. Apologies in advance if the DE/FI translation isn't spot on. CleanShot Google ChromeEdit Page Lakes & Trails • lakesandtrails.go2026-06-10 at 21.56.57.mp4
-
I'm getting the following error, breaking the JSON output of a template (named json.php) i've built to answer a getJSON() JS call and output JSON to feed a popup: Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 83906560 bytes) in /server_path_to_my_root_folder/site/modules/TracyDebugger/includes/TD.php on line 115 As I'm using tracy heavily in templates delivering HTML and JSON as well for a long time now, I'm suspicious this occurs since a recent update to version 5.0.37 and stays throwing errors with version 5.0.38. While looking around, I found this error message in tracy's exceptions tab: Warning: file_get_contents(/server_path_to_my_root_folder/site/modules/TracyDebugger/tracy-2.11.x/src/Tracy/BlueScreen/../assets/reset.css): Failed to open stream: No such file or directory in /server_path_to_my_root_folder/site/assets/cache/FileCompiler/site/modules/TracyDebugger/tracy-2.11.x/src/Tracy/BlueScreen/BlueScreen.php on line 182 the exhaust error breaks the JSON structure and the popup is waiting for the template's return forever. When I delete all bd() calls from json.php everything works fine and the return of it comes back fast (I don't work locally, but already on a production-identical webspace). As soon as I'm inserting a single minimal bd() call, the template out is broken by tracy with the error message above. When using tracy on "normal" page templates with HTML output i don't see any errors. Any ideas where to turn some screws to get rid of this error?
-
Yes true. I purposely omitted sitemap generators in this phase. A significant volume of issues on the SEO threads are actually site map related so if I’m going to support it, I want it to work properly. And also I’m a big fan of Ryan’s pro sitemap module and simply prefer not to overlap existing modules that are actively developed. But it I’m not saying “never” 😉
-
Yeah I just installed this module too and when comparing your module with that from maximus (and the old trusty Seo Maestro) there is no perfect "all in one" solution. Each module does something better than the other and vice versa! I think it is still mandatory to try out what module fits for your projects and fills out the gaps in your personal workflow. For example: I like that @maximus module includes sitemap generation and redirect handling I like that your module offers per-template defaults and so on...
-
Thanks 🙏 Plenty of choice these days so feel free to find something that suits you. Also @maximus has a very comprehensive SEO module too.
-
Sounds great. I will give this module also a try 🙂
-
Peter Knight started following SEO Neo - 1.1.3 available
-
Here's a handy FAQ with the types of issues I needed to solve and are built into SEO Neo. FAQ (quick answers) 1. Can meta descriptions be filled automatically from existing page fields? Yes. Smart field mapping and per-template defaults pull from fields like summary or body when the SEO description is left blank. Auto-resolved text is truncated to a configurable length at a word boundary. 2. Can page titles get a consistent suffix (e.g. “About us | My Company”)? Yes. That is built into module config: site name, title format, and separator — no custom code needed for the usual pattern. 3. Can I override or extend resolution logic with hooks? Yes. Individual resolvers (title, description, OG image, etc.) are hookable, so sites with non-standard rules can plug in custom logic without forking the module. 4. Does the admin SERP preview reflect auto-resolved values? Mostly. On load it uses the same resolver chain as the frontend. If SEO fields are empty, the preview shows the computed title and description. If an editor types into the SEO fields, those values take precedence. 5. I am on MarkupSEO or Seo Maestro — can I migrate gradually? Yes. Both legacy fieldsets can stay on the same template while you copy values across. The SeoNeo tab can show a small NEO badge so it stays distinct when both tabs are labelled “SEO”. Migration helper planned. FAQ Longer versions 1. Automatic descriptions from content fields A common requirement is that staff and blog pages should not need a separate meta description when summary or body already exists. SeoNeo handles this in module config, not by asking editors to duplicate content: Smart field mapping defines fallbacks when seoneo_description is empty — for example, try summary, then body. Per-template defaults go further: a [blog-post] or [person] block can set description={summary|body} so only those templates use that chain. Truncation applies to auto-resolved values only. Values typed directly into the SEO description field are left as-is. The max length is set once in module config. There is also an ancestor walk prefix (*fieldname) if a section landing page should supply a default description for child pages. For edge cases — inheriting a homepage description site-wide, template-specific truncation rules, or pulling from a custom settings page — hooks on the description resolver are the extension point. 2. Title suffixes and branded <title> patterns Another frequent ask is a predictable title pattern: Page name | company.com That is a first-class feature via site name, title format, and title separator in module config. Per-template defaults can influence the source part of the title (e.g. {long_title|title} on blog posts) while the suffix still comes from the global format. Homepages that already store a fully branded title in the SEO field can use a hook on the title formatter to skip the automatic suffix on that one page. 3. Hooks for custom SEO logic Sites with existing custom SEO logic often need to tweak titles, descriptions, or OG images based on template, page ID, or external settings. SeoNeo splits resolution into hookable steps — reading and resolving individual values, formatting the final title, resolving OG image, hreflang, and so on — rather than one monolithic hook. Render methods are hookable too if you need to append tags rather than change resolved values. 4. What the SERP preview in the admin actually shows The bundled SERP preview calls the same PHP resolvers the frontend uses on initial render. While editing, typed SEO values take precedence; empty SEO fields fall back to server-resolved values from page load. One limitation: the live preview watches the SEO input fields, not every source field in the fallback chain. Editing summary will not update the preview until save/reload if the description comes from smart-map. A richer fallback-chain visualisation in the editor is on the PRO roadmap. 5. Multilingual sites Multilingual support is a common question for any SEO module, especially when hreflang and locale tags need to stay in sync with ProcessWire’s language tabs. SeoNeo is built around native PW language-aware fields, not a separate storage layer. Each seoneo_* field behaves like any other translatable field — editors fill in SEO values per language tab, and the resolver chain returns the value for the currently active language on the frontend (or whichever language you switch $user->language to in PHP). Configuration for multilingual output: Per-language site name — override the global site name per language (e.g. de=Mein Beispiel). Used in title formatting, template defaults, and og:site_name. Locale map — map PW language names to BCP47 codes (default=en-GB, de=de-AT, etc.). Powers og:locale, og:locale:alternate, and hreflang codes. Hreflang alternates — emitted per language with correct URLs, including x-default pointing at the default-language URL. Segment and pagination handling matches the canonical URL policies. In the page editor: The SERP preview includes a language switcher (on multilingual sites) so editors can preview each language’s title and description without leaving the current PW language tab. Resolved values in the preview use the same per-language fallback chain as the live site, including the localised URL in the breadcrumb. Desktop/mobile toggle and character counters apply per surface regardless of language. Smart-map and template defaults respect language context too — a German summary field resolves when the German language is active, not a mixed default. For sites with unusual language setups (custom domain-per-language, non-standard hreflang codes, or locale rules that differ from PW’s language names), the hreflang and locale resolvers are hookable. 6. Migrating from MarkupSEO or Seo Maestro Both legacy modules can stay installed while you move page by page: Install SeoNeo (InputfieldSeoNeoPreview installs with it). Add seoneo_tab to templates — remaining SEO fields insert automatically on save. Copy legacy values at your own pace. Switch templates from $page->seo to $page->seoneo when ready. Uninstall the legacy module when frontend output is fully on SeoNeo. Watch for doubled <head> output if both modules auto-inject meta tags.