All Activity
- Past hour
-
I already generate LD-JSON in my code. I haven't entered anything in the module's identity settings, but it's still generating the json on the frontend. Is there a way to disable this please? I want very specific output for each template type. Unless there is a way in Ichiban to achieve that?
-
Hi @maximus - thanks for all the great recent improvements. Is there a way to disable the <link rel="alternate" hreflang="english-au" etc from being rendered? I have a lot of installed languages which get used behind the scenes, but the website itself is only in English, so having all these listed just isn't correct.
- Today
-
module ProcessWire Dashboard
d'Hinnisdaël replied to d'Hinnisdaël's topic in Module/Plugin Development
@suntrop Datetime rendering should be fixed in v1.6.1. I've added the published field as a system timestamp and a fallback for date fields without output format. Let me know if that fixes it on your end. -
module ProcessWire Dashboard
d'Hinnisdaël replied to d'Hinnisdaël's topic in Module/Plugin Development
@suntrop Just realizing now that the published field is an actual system datetime field. The module only checks for created/modified, so that would explain it. I'll look into making the checks consider all three, and then enable datetime formats in all contexts. -
The Upgrades module doesn't explicitly include the PW core module of MarkupHTMLPurifier in its update check (as it's part of the core), so there must've been a community module, or a much older version that was manually installed into the site/modules folder. If you check the site/modules/MarkupHTMLPurifier folder for the *.module (and/or README) file, can you tell who owns the module? From the one in core, the MarkupHTMLPurifier.module `getModuleInfo()` method contains the following: public static function getModuleInfo() { return array( 'title' => 'HTML Purifier', 'summary' => 'Front-end to the HTML Purifier library.', 'version' => 497, 'singular' => false, 'autoload' => false, ); } ...and here is an example screenshot of the Modules panel in the admin for comparison:
-
Thanks @maximus I installed the new version but I can't seem to make it work. For "Rendering" I am using this values {meta_title} | {site_name} The "site_name" is added when viewing the page in the frontend but the "meta_title" (resolved from field:title in the global defaults JSON) is missing. I rebuild the index multipel times but cannot see the title (or description) here either: I have placed some default values for title and description in my config next to the new "title format" options and would assume that those values should be visible after making an audit:
-
I just realized that published is by default set as a datetime instead of a timestamp like created/modified. I don’t know why, but that may be the reason. It is, however, being retrieved (from within the API) as a timestamp, which is how it is defined in the docs: https://processwire.com/api/ref/page/
-
MediaHub 1.19.2 is on the way, and while I'm finalising some UI polish, I wanted to share the custom fields integration, which some of you have requested. And because both a MediaHub asset page and an input field are new to ProcessWire, we benefit from some new features I hadn't planned. You can add custom fields at two distinct levels... On an asset detail page (fig 1), useful for asset organisation and metadata On the MediaHub input field, giving editors access to those fields when placing assets (fig 2) Fields can exist independently at either level, but when the same field appears in both, they work together. So you might have custom fields on only the asset detail page or only on the input field. Explanations after screenshot... Fig 1 - Asset-level defaults Custom fields on the asset detail page act as the source of truth for that asset. Fig 2 - Editor field overrides You can choose whether to expose those fields to your editors on the MediaHub input field, or not. Your call. Fig 3 - Inherited value with reset option When the same field exists at both levels, the MediaHub field inherits the value set on the asset detail page. You can override it on a field-by-field basis, and if you change your mind, the rewind icon lets you reset it back to the asset value. It only appears once you've made a change. Fig 4 - Independent field ordering The order of fields on the MediaHub input field can be completely independent of the order on the asset detail page. I'll share a few more details when I wrap up and create a dedicated post.
- 37 replies
-
- 2
-
-
- media upload
- media
-
(and 3 more)
Tagged with:
-
module ProcessWire Dashboard
d'Hinnisdaël replied to d'Hinnisdaël's topic in Module/Plugin Development
@suntrop What's the difference between the custom field and the published field? Isn't published a custom field as well? -
Thanks, this mostly works. It works for the custom field I am using, however, it is not working for "published." But using modified works in my case as well.
- Yesterday
-
the split space bar is interesting. You have it configured for different actions. Let me guess. Space and outer space? But seriously…what do you you use the extra one for?
-
szabesz started following A brand new day
-
Wow, it even has an Fn1 key! ;)
-
Vox 1.3.0: Textformatter, forum layout and inline forms inside content I have updated Vox with a new set of content-friendly integration options. The main addition is TextformatterVox. It allows editors to place Vox widgets directly inside textarea or rich-text fields, without touching template files. Examples: [[vox:forum]] [[vox:reviews]] [[vox:questions]] [[vox:discussions]] [[vox:all]] There is also a new inline form mode for editorial pages. You can now insert a compact discussion, question or review form between paragraphs, similar to how media sites place participation blocks inside articles: [[vox:form]] [[vox:discussion-form]] [[vox:question-form]] [[vox:review-form]] Custom copy is supported: [[vox:form type="question" title="Ask the editors" intro="We will answer useful questions here." button="Send question"]] This makes it easier to add community interaction exactly where it makes sense in the content flow, instead of only placing a widget at the end of the page. Other recent additions include a forum-style overview template: [[vox:forum]] It shows categories, recommended threads, newest discussions, search and a start-discussion form. The current version is 1.3.0. Changelog highlights Added TextformatterVox. Added forum-style landing view. Added compact inline forms for discussion, question and review posting. Added Textformatter documentation and install-screen examples. Updated public styles for inline editorial forms. Repository: https://github.com/mxmsmnv/Vox
- 6 replies
-
- 2
-
-
- discussions
- forum
-
(and 1 more)
Tagged with:
-
module ProcessWire Dashboard
d'Hinnisdaël replied to d'Hinnisdaël's topic in Module/Plugin Development
@suntrop The dateFormat option is currently only applied to system timestamps (created, modified) to avoid showing unix timestamps. I was assuming all other date fields to have a defined output format. Can you try removing the false from this line in the codebase and report if it's working as expected for you? If so, I can add a condition to check for missing output format and apply it there as well. - Last week
-
Is the eventual goal to perhaps have PW help us build our code without the need of an external LLM? And also take into account PW’s community modules? Imagine if it could also do front-end (HTML & CSS through the current frameworks UIKit, but including Tailwind too). That would honestly make PW a one-stop-shop.
-
Hi @Stefanowitsch, Yes, this is now possible. I added a global Title Format setting in Ichiban settings under: Settings → Rendering → Title Format You can use it like this: {meta_title} | {site_name} or, if you prefer a fixed suffix: {meta_title} | my-company.com Supported placeholders are: {meta_title} {site_name} {entity_name} {host} So your examples would render as: Home | my-company.com Our Services | my-company.com The title format is applied to the rendered <title> tag, and Ichiban’s Audit / Bulk Editor title length checks now include the formatted title length as well. After changing the format, rebuild the audit index so the stored title length checks are refreshed.
-
Thanks Adrian, this is now possible via a new hook: Ichiban::resolvedSeoValue. It runs after Ichiban has resolved the page/template/global defaults and built-in fallbacks, so the rendered tags, previews, Audit, Dashboard stats, and Bulk Editor all see the adjusted value. That means you can use it for automatic descriptions on staff/blog pages and OG image fallbacks without those pages showing as incomplete in the dashboard. Example is in the README, but the shape is: wire()->addHookAfter('Ichiban::resolvedSeoValue', function(HookEvent $e) { $page = $e->arguments(0); $group = $e->arguments(1); $key = $e->arguments(2); $value = $e->return; if (in_array($page->template->name, ['person', 'blog-post'], true) && $group === 'meta' && $key === 'description') { $source = $value !== '' ? $value : wire('sanitizer')->textarea($page->get('summary|body')); $e->return = wire('sanitizer')->truncate($source, 155); } if ($group === 'og' && $key === 'image' && $value === '' && $page->template->name === 'blog-post' && $page->images->count()) { $e->return = $page->images->first()->httpUrl; } });
-
Very exciting to hear Ryan. My understanding of how LLMs work is surface level. You mentioned it's being trained on ProcessWire documentation. Does it also have to be be trained on anything general to have a stronger understanding of English itself (understanding nouns, verbs, how to form sentences, having a personality, etc etc)?
-
I have Processwire 3.0.255 and HTMLPurifier version 1.03. that was automatically updated 7 days ago along with an update of another module. In the Upgrades module it says 'Up-to-date'. I think it was 1.0.2. and upgraded to 1.03. Didn't do much other upgrades and only installed the NativeAnalytics module.
-
I love that rather than just consuming AI, you're trying to learn how it actually works. Speaking of the translation of code - I wonder if AI would make it easy to provide a PostgreSQL database layer for ProcessWire? Also speaking of C, I wonder about translating the entire ProcessWire codebase into Rust. (It would probably be expensive in terms of token use) ProcessWire is fast as PHP apps go, but Rust is blindingly fast, but harder to learn than PHP. It's also memory safe whereas C isn't. It might not work, as PHP is interpreted so it makes it easy to deploy individual files, whereas Rust compiles to a single binary executable, so it's probably like comparing apples with pumpkins, but all kinds of things ight be possible of you don't have to painstakingly write all the code by hand.
-
module Image Library — edit every image across your whole site in one table
Mikel replied to Mikel's topic in Modules/Plugins
Update (v 0.58.0): tag-vocabulary management & a "Used in" column Hi, everyone! We´ve been enjoying developing the module a bit further this week. Since the last update the module has grown from 0.55 to 0.58. Two bigger additions: 🏷️ Tag-vocabulary management You can now curate a field's predefined tag vocabulary right inside the tag picker, with no trip to the field settings: Rename or delete a predefined tag library-wide, inline (no modal-on-modal). Table rows live-refresh immediately after a library-wide rename/delete. Newly entered tags can be promoted into the field's predefined list. This is only available when the image fields file tags setting is set to "User selects from list of predefined tags + can input their own". Alphabetical ordering, and a mobile-friendly single-column tag chooser with touch controls. 🔎 "Used in" – a content-based where-used column A new column answers the question you actually have at a glance: which pages embed this image? It scans rich-text content (not just the field relations), so it also catches images placed via "Insert from library": Cross-page "Insert from library" embeds are resolved to their true source image, and embeds inside (Matrix)Repeaters are attributed to the owning page. The count is a plain link that opens a dialog listing every page and the fields the image is embedded in. The "Used in" and "Variations" columns are now sortable, and integer columns are centre-aligned. Next up (in development): nested collections – group collections into subgroups with a drag-and-drop manager, cascading fly-out menus in the bar, and touch-friendly curation. Have a nice weekend! Cheers, Mike -
Have FUN this weekend Ryan! Isn't that feeling of discovery a wonderous thing.
-
wbmnfktr started following Weekly update – 12 June 2026
-
All I can say is... 🤯
-
ryan started following Weekly update – 12 June 2026
-
This week we've got a big batch of issue fixes on the core dev branch (about 18 fixes), most related to GitHub issue reports. I've also been catching up on some client work this week, so not as many updates as in the last few weeks. As I use more AI in my work, I've been building up a real desire to understand how it works. To me it seems like magic. So recently I started building a language model in PHP. Admittedly PHP isn't the ideal language for building such a thing, but this is really about learning, and so I thought I should use the language I know best. Using something like PyTorch in Python would certainly make things much easier, but would also abstract away a lot of the understanding I want to get out of the project. The new model (and future ProcessWire module) is called Rambler. Currently it rambles on, often incoherently, hence the name Rambler. Though it'll get more coherent as time goes on, no doubt (hopefully!). Rambler uses zero machine learning libraries, no black boxes, and in fact has no dependencies at all. It's just pure PHP implementing the same mathematical foundations that power modern AI systems like GPT, at least that's the goal. I'm writing all the code myself, but I do have Claude as my teacher, describing each step, teaching me the concepts and terminology, and telling me what I need to code. After I code each part, he looks at it and tells me what I did right and wrong. It's a slow process but I learn by doing, and so it's also a lot of fun. It certainly helps to have an infinitely patient teacher. Currently the project runs two models side by side (for comparison): A Markov n-gram model, which is a classical statistical approach that predicts the next word based on how often word sequences appeared in training data. A neural network model that learns distributed word representations called embeddings. The neural model passes those embeddings through a hidden layer with ReLU activation, then predicts the next word using a softmax output. As far as I understand it, these are the same core building blocks used in early neural language models. The most time consuming part of doing this in PHP is the training. Python has libraries and functions that handle a lot of the hardcore math in ways that can take advantage of the hardware, like GPUs. But this is not the case with PHP, so training uses the CPU, and a lot of it! As far as the training system goes, it uses mini-batch gradient descent with backpropagation. The model makes predictions, measures how wrong it was (which is the "loss"), and then works backwards through the network, computing gradients to adjust every weight in the right direction. Rambler also includes two tokenizers: A word-level tokenizer, and a BPE (byte pair encoding) tokenizer. BPE is the subword strategy that is used by GPT, Claude and other modern LLMs. But for the small scale that I'm working at, the word-level tokenizer works faster, so far. The next milestone is adding an attention mechanism in a RamblerTransformer subclass. This attention mechanism (a transformer) is the core innovation behind a lot of modern LLMs. I'm hoping to get started on that part this weekend. Beyond being a learning exercise, the longer-term goal is to train it on all of the ProcessWire documentation (which is what they call a "corpus" in this context) and release it on GitHub as a learning resource, and a PW module. Perhaps someday it'll be a tool in ProcessWire, or at least a really smart search engine for ProcessWire, we'll see. As far as I could tell, there aren't any other PHP-based language models that use the same technologies used by modern LLMs, so I figured, why not. I want to understand how they work under the hood without wading through Python frameworks, and I'm sure others do too. Once I get a little farther along with it, I look forward to getting it up on GitHub as a standalone project, but also as a ProcessWire module. The slowness of the training process (the model, not me... well okay, probably me too) is the hard part. I'm currently running a 30 hour training on all the text from a book. When the project is finished, I'm likely going to have Claude or Codex do a translation of the training code into C, that takes advantage of the much faster math capabilities available there. From what I understand, a 30 hour training in PHP will take about 30 minutes in C. I don't know if that's accurate or not, but it sounds good enough that I'm going to find out. 🙂 Thanks for reading and have a great weekend!
- 5 replies
-
- 26
-
-
-
😆 I blame the docs. But seriously glad it’s working now.