All Activity
- Past hour
-
Happy Friday, everyone. I'm starting this Friday with something I meant to do last Friday! The latest version of MediaHub (1.19.25) is now available, and thanks to our testers, we have improvements across the UI, module performance and some new features too. Existing Media hubbers: Download here New to hubbing: Read here Full changelog: Read here What's new and improved in 1.19.25... Upload screen refresh Uploading is one of the first things a new user will do, so the first impression should be positive, distraction-free and simple. But behind a screen that seemingly has 'just one job', people asked if they could organise their uploads from here. While you can do this later within the Library, being able to associate your uploads with Collections and Labels at this point across multiple images will save you a lot of time and asset admin. An "Organise uploads" bar above the dropzone lets you assign Collections and Labels before the batch starts. If one doesn't exist yet, you can create it from here. A scrollable card queue replaces the old list. Each file shows a thumbnail or file-type icon, inline status, and a per-file progress bar. Oversized or unsupported files stage with a clear warning and are excluded from the upload. Inline filename editing on each card is possible before you upload. We'll introduce a table view shortly if you're uploading at scale and want to sort and filter at this point. Once your upload starts, you can see the progress of each file and a master progress bar. Custom fields on assets Adding custom fields to a MediaHub input field works the same way as the existing workflow. Should you wish, you can also assign custom fields to a master asset depending on your use case. You can assign custom fields to your master asset or just the MediaHub field on your page. They work indenpendently when you want, but also have a relationship with and inherit-with-override model. Inherit-with-override works the same way Title and Alt already do: The asset detail page (left) holds the canonical (library-level) value. Every reference inherits it by default. On a page, custom fields appear below Title, Filename, Description, and Tags. An editor can override the value for that one reference only. The override saves when the page saves, no separate save button A small reset control next to any overridden field lets you revert to the library value in one click On a MediaHub input field, a developer can choose to display custom fields in a different order than on the asset detail page Two tiers Some metadata belongs to the asset everywhere (a photographer credit, a licence URL). Other metadata belongs to how the asset is used in a specific field. Both are supported: Asset-level fields go on pkd-mediahub-asset. Master value plus per-reference override and reset Field-specific fields go on a template named mediahub-field-{fieldName} (mirrors ProcessWire's native pattern). These appear only in that field's drawer and are per-reference only, no library master I hadn't planned on allowing custom fields on the asset detail page, but it was straightforward once I added some of the standard text-based fields. It works in the same way you'd add a field to any template and doesn't even require the extra custom field to input field step (creating an extra fileless template). Anything on that asset template that isn’t one of MediaHub’s built-in fields: title, image, alt, labels, collections, and so on - is treated as yours. Should you wish to uninstall MediaHub, we have safeguards in place to keep your custom fields on your ProcessWire install, which is what I think you might want. The only real downside I have found so far is that custom fields on the master asset template show on every asset detail page, so a name like Photographer fits a photo but feels odd on a PDF or spreadsheet. What has worked for me is broader labels from the start (Source, Description). We plan to make this more asset-aware in a future release, but for now, name fields as if every asset type will see them, because they will. But, this is just a side note and doesn't affect input fields, which was the core feature and of the 1.19.25 release. Library thumbnails 1.19.25 takes a leaner approach to thumbnail generation and makes more effort to reuse thumbnails across the UI vs generating the full scope on upload and import. One preview at upload. Each image gets a single small proportional preview. That's 75% fewer auto-generated files at upload time. One library thumb per asset. Grid, Masonry, and List share one canonical thumbnail. CSS handles grid cropping. Built on first browse. The full library size is generated the first time you scroll an asset into view, not during upload. The upload preview is shown immediately as a placeholder so nothing looks broken while it's being prepared Import Existing Images and the asset picker use the same on-demand model. Bulk imports of existing assets from existing fields should feel noticeably lighter on disk and CPU. Library bulk actions and toolbar The search and filter area of the Library was cleaned up for consistency and clarity in advance of some architectural changes (more below) Selecting assets now swaps the breadcrumb row for a compact bulk action bar with actions for Collections, Labels, and Delete. There's a useful workflow change here: you can select assets first and then create and assign a collection in one step, rather than having to create the collection first. Library and picker consistency MediaHub looks like it has one central Library, but under the hood there are actually three slightly different versions of it: the main Library, the InputfieldMediaHub picker, and the TinyMCE picker. Over time I found that improvements made to the main Library were easy to overlook on the other two, since they didn't share any underlying code. To reduce that drift, 1.19.25 moves the toolbar, sidebar, filters, and tiles onto shared partials so all three surfaces stay aligned going forward. This isn't just a tidy-up under the hood either. It lightens the module overall, and it's what made it possible to introduce the Collections and Labels sidebar into Library screens that didn't have it before. Import page images The ability to import images from your existing fields was an early feature and has been in MediaHub since v1 1.19.25 gives it an overhaul. BTW the import Page Images button is optionally enabled in the field config so you can enable it on a field-by-field basis. Repeater and RepeaterMatrix support The scan now walks Repeater and RepeaterMatrix fields up to three levels deep. Results are grouped under breadcrumb headings so you can see exactly where each image came from. How matching works Each image on the page is scored against the whole Hub using four signals: filename stem file size dimensions and a perceptual hash (a 64-bit visual fingerprint that can match re-encoded or renamed copies). Each result gets a confidence badge: New - not currently in the Hub Exact match - identical file already in the Hub Likely match - looks like an asset already in the Hub Possible match - filename matches a Hub asset but the file content appears different Already added - already used in this field When a match is confirmed, MediaHub adds a reference to the existing asset rather than copying the file again. Hardening for large pagesThere's also longer scan and import time limits, JSON error handling, a 200-selection cap per request, and client-side checks so a timeout doesn't surface as a cryptic error. Import Page Images was one of MediaHub's earliest features, and I think there's more we can do here. The import modal in particular could use a bit more cleanup, so that's on the list. That's pretty much it. Thanks for reading and scrolling! MediaHub is currently available for single sites, developers of multiple sites and agencies. If you'd like to try it first, DM me. Have a great weekend, Peter
- Today
-
poljpocket started following Ausgleichskasse des Schweizerischen Gewerbes AK105
-
Today, I am happy to showcase one of Fruitcake Communications AG's latest projects powered by ProcessWire. Ausgleichskasse des Schweizerischen Gewerbes AK105 AK105 is one of Switzerland's long established trade compensation funds, serving over 10,000 companies with first and second pillar social insurance, family allowances and pension administration since 1947. The multilingual site gives employers, employees, the self employed and pensioners clear access to all services, news and the connect online portal for paperless administration. The website is only part of the whole project as we also refreshed the existing logo, created a new corporate identity from that, and reimagined all business materials. The result is a modern, professional brand identity that accurately reflects the organization’s values, also perfectly reflected on the new website. We have developed a portal for existing business customers, parties interested switching to AK105 and also the actual people to whose benefit the trade compensation funds are. The goal is to answer questions and provide further information directly on the federal government portal. We knew one of the most important aspects of such a challenge is the search function and improved accessibility. ProcessWire has ready-to-use tools for both of these goals whilst our frontend is purpose built in-house like always for Fruitcake. Search We are making heavy use of @ryan's RepeaterMatrix which allows any component to be used literally anywhere on the website. Searchability becomes a challenge just because of that though. Most of the actual content lives either inside RepeaterMatrix pages or is fetched from other meta content. Thus, a front-facing page will be stitched together from many different sources like repeaters and other pages. To actually make the website searchable, we have developed a sophisticated set of hooks and functions which will search through all repeaters, nested repeaters and then from these results, backtrack to the actual front-facing pages so that the search result shows the precise content found whilst then linking back to the correct place where that content is located. Accessibility Not only just because the target audience is people aged 50+, accessibility is another key requirement for such a project. Apart from following accessilibity standards, we also have included a text-size switcher to allow for better readability whilst keeping the rest of the content concise. Most of the work here is invisible though: Styles for prefers-reduced-motion switches, proper handling of any navigation and control element using just the keyboard and flawless screen-reader support. Actually selling this invisible work to clients is a challenge in itself. Luckily, our client is already familiar with the necessity and the benefit of the endeavour and thus there was almost no discussion needed. Admin impressions Technical details The site is powered by ProcessWire 3.0.255 of course using the new admin theme which we ❤️! Modules in use: RepeaterMatrix SeoMaestro ProcessRedirects TracyDebugger ProtectedMode WireMailSmtp FileValidatorSvgSanitizer InputfieldAssistedURL FieldtypeColorPicker Links Case study on our website: https://fruitcake.ch/cases/ak105/ Website: https://ak105.ch/ Showcase on processwire.com: coming soon
-
- 1
-
-
That's strange, as that's what I use and I like it. The only thing I do not like about it is the battery. There is no official replacement battery, which is a shame. I ordered my first third-party replacement for it two months ago and it was performing badly right from the beginning.
-
Hello everyone, I have been working on PWGermanShop, a comprehensive shop system built specifically for ProcessWire to address the regulatory and functional requirements of the German market. The system is nearing its final stages, and I am now looking for a small group of testers to help gather real-world feedback before a wider release. Since the ProcessWire forum is international, I am writing this post in English. However, please note that both the system and its documentation are currently only available in German, as the project is tailored to the DACH region. What is PWGermanShop? PWGermanShop is designed to handle the typical workflows and legal requirements of German e-commerce setups within ProcessWire. You can read through the documentation here to see how it works: 👉 https://mholte.de/docs/PWGermanShop/ How to participate in the test: The system is currently not publicly downloadable. I would like to share the installation files individually with interested testers to ensure a structured feedback process. If you are a ProcessWire developer building sites for the German-speaking market and would like to test the system: Please read the documentation to see if it fits your general requirements. Reply to this thread or send me a private message (PM) if you would like to participate. I will then send you the download link and instructions on how to install it. What kind of feedback is helpful? Is the setup and configuration process logical? Does the documentation cover all the steps clearly? Are there any bugs or edge cases you encounter during your tests? Thank you very much for your interest and support. I look forward to your feedback and to collaborating with some of you! Best regards
-
Sound and sensitivity of button presses. I also tried MX Keys for Mac, it's terrible. I returned it after a few days.
- Yesterday
-
Thanks Peter! Not specifically for the forums. I needed a reusable weather module for ProcessWire projects: normalized provider data, cache, fallbacks, geocoding, and optional widgets. The illustration is basically a quick visual overview of the module features. For some modules there isn’t always a meaningful screenshot to show, especially when the main value is in the API or backend logic, so I decided to make a small illustration for each module. It makes the project easier to scan and gives the release page a more polished, professional feel 🙂
-
Thanks @adrian, great catch on the superuser fallback. You were right — that made the setting misleading if someone intentionally cleared the excluded roles list. I’ve fixed that in 1.1.0, so leaving the field blank now tracks all roles. Also, thanks for the heads-up about Native Analytics being hookable now. I hadn’t been following its recent development closely, so I didn’t know about that change. I liked your suggestion and added optional Native Analytics integration in 1.1.0 as well. Compass remains fully standalone via Setup → Compass, but if Native Analytics with hookable dashboard tabs is installed, Compass now adds its own tab there too. And yes, I still think there’s room for smaller focused tools alongside bigger all-in-one analytics modules. Sometimes people just need a specific behavior/heatmap tool without adopting a broader analytics setup. Fun side note: Compass was originally started in April 2026 in Philadelphia, while I was at a Mel Robbins event.
-
I just gave things a shot on my end with a similar structure, on my DDEV development machine, and was able to (eventually) successfully access the contents of the folder once I got past the htpasswd basic authentication. The error I experienced was that I was receiving a 500 server error, in this folder, at first. Since I knew things were working before implementing the htpasswd/htaccess combination in this particular folder, I checked the logs. DDEV is not clear on which server the logs are from, but I believe in this case it was Apache (I am not using NGINX). The error message was: My htaccess AuthUserFile directive used a relative path; it seems this particular instance of Apache didn't like that, so I opted for a full path. That worked, and I was once again able to access the content of that folder (after getting beyond the basic auth). Now, all that being said, you say you're getting the ProcessWire-generated 404 page. Thankfully, the 404 page is itself an error document, so there should be some sort of logs, somewhere, that would report why you're getting that output. Have you checked any of the logs to see, by chance? Have you tried creating another directory (temporarily) with a test file in it just to see if you can get that to load - one that is not protected by a basic password? Have you edited, and/or reviewed, the default ProcessWire installation's .htaccess file to see if there might be a conflict - possibly due to file extension?
-
module Image Library — edit every image across your whole site in one table
adrian replied to Mikel's topic in Modules/Plugins
Awesome, thanks! -
module Image Library — edit every image across your whole site in one table
Mikel replied to Mikel's topic in Modules/Plugins
Thanks, @adrian – done, shipped it your way. findRaw now just asks for the bare field name instead of listing subfields, so PagesRaw hands back the whole column set and the new strict check has nothing to trip over. Tidier all round. Why we missed it: we build against the stable PW release for client work, so the dev-branch change wasn't on our radar. And, honestly, someone here forgot to watch the repo. Both sorted now. Cheers for the nudge and the fix. Cheers, Mike -
module Image Library — edit every image across your whole site in one table
adrian replied to Mikel's topic in Modules/Plugins
@Mikel - any chance of implementing this fix this please: https://github.com/frameless-at/ProcessImageLibrary/issues/10 - I think my fix would also fix @eelkenet's issue and is much simpler, but maybe I am missing something? -
@eelkenet I've added the ability to run single migrations from the CLI, as well as re-run, so they should be there now. The CLI --flags options should be more clear now, if you type "php index.php" the help will show all the flags under the CLI commands. As for MCP, we'll be implementing local MCP for most AgentTools commands, probably within the next two weeks. I'm told by GPT 5.5 that agents will likely still prefer to use the CLI in AgentTools most of the time, and that it's more token efficient to do so. But there are also benefits to MCP too so it makes sense to support. I doubt we'll have as many MCP tools as what you see in PromptWire, and AgentTools and PromptWire are completely different tools, so if you find them both useful it makes sense to use both.
-
module Image Library — edit every image across your whole site in one table
Mikel replied to Mikel's topic in Modules/Plugins
Fixed in 1.0.3 (just pushed). Thanks a lot for the report, @eelkenet, that one's on us. Since the introduction of image tags we use them on every image field. The module now requests tags per field only when the field actually has them. After the upgrade it should run cleanly on your test setup now. Let me know if anything else trips up. Cheers, Mike -
PS, Native Analytics is hookable (https://github.com/Roychgod/NativeAnalytics/pull/15) these days, so I took the approach of actually building my Behavior/Heatmap module to add a tab to that module. Not sure if you think it would be a good approach for Compass, but just thought I'd throw the idea out there in case you didn't know about the option.
-
Leonard joined the community
-
Hey @maximus - another great one! I noticed that the settings default to having "superuser" in the excluded roles, but even if you remove that, this line: $excludedRoles = $this->parseConfigList($this->get('exclude_roles')) ?: ['superuser']; forces the superuser block anyway. This confused me for a bit while testing.
-
Thanks, that makes sense. I updated the Bulk Editor so it now shows the rendered title below the editable Meta Title field when Title Format adds a suffix or other text. The input still contains only the raw editable title, so the suffix is not accidentally saved into each page override, but the rendered title is visible and the length count continues to include the configured Title Format.Thanks, that makes sense. I updated the Bulk Editor so it now shows the rendered title below the editable Meta Title field when Title Format adds a suffix or other text. The input still contains only the raw editable title, so the suffix is not accidentally saved into each page override, but the rendered title is visible and the length count continues to include the configured Title Format.
-
module Image Library — edit every image across your whole site in one table
eelkenet replied to Mikel's topic in Modules/Plugins
Hi @Mikel, I kept running into crashes when attempting to test this module: ProcessWire\WireException Unknown column name(s) for findRaw: images.tags search► File: .../future-materials/public/wire/core/Pages/PagesRaw/PagesRaw.php:1816 1806: // rename i.e. [ 'field_name' => 'new_field_name' ] 1807: $this->requestFields[] = $prefix . $key; 1808: $this->renameFields[$prefix . $key] = $value; 1809: } 1810: } 1811: } 1812: 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: } So apparently you need to allow Tags on image fields in order for this module to work? I never use those, so maybe this could become optional? -
Thanks for your help! The protected folder and the htaccess file are beside the "site" folder. PWSITE: - /site/ - /wire/ - /index.php - /.htaccess (of PW installation) - /protected-subfolder/ - /protected-subfolder/.htaccess - /protected-subfolder/.htpasswd
-
Nice illustration too 🙂 Did you need this module developed for your forums?
-
Meteo is a weather integration module for ProcessWire. It fetches current weather and forecast data, normalizes responses from different providers into one predictable array format, and can optionally render ready-made weather widgets. Providers Meteo supports: Open-Meteo OpenWeatherMap WeatherAPI.com Open-Meteo works without an API key. OpenWeatherMap and WeatherAPI.com can be used as primary or fallback providers when API keys are configured. Features Current weather, hourly forecast, and daily forecast City geocoding Provider fallback chain File cache with configurable TTL Structured array output for custom templates or frontend frameworks Bundled widget templates: card, full, minimal Widget themes: auto, light, dark One-click Material M3 demo page installer Error tracking via getLastError() Basic usage $meteo = $modules->get('Meteo'); $weather = $meteo->getWeather(40.7128, -74.0060, [ 'location_name' => 'King of Prussia', 'timezone' => 'America/New_York', ]); echo $weather['current']['temperature']; echo $weather['current']['weather_label']; Render a bundled widget: echo $modules->Meteo->styleTag(); echo $modules->Meteo->renderWidgetForCity('King of Prussia', [ 'language' => 'en', 'widget_theme' => 'auto', ], 'card'); Links GitHub: https://github.com/mxmsmnv/Meteo Documentation: https://github.com/mxmsmnv/Meteo/blob/main/docs/USAGE.md
-
It's not possible to upload a profile picture in the forum
maximus replied to David Karich's topic in General Support
Confirm this problem. https://streamable.com/ukewz6 I have same green avatar 🙂 -
Hey everyone! Built a heatmap module for ProcessWire, thought I'd share. It tracks clicks, mouse movement, rage clicks and scroll depth — and shows everything as a heatmap right in the admin. No third-party services, all data stays on your server. You pick a page from the list, it loads in an iframe with the heatmap overlaid on top. Switch between click/movement/rage/scroll tabs, filter by date and device type, export as PNG if you need it. Install is just drop the folder into /site/modules/ and hit Install. The tracker injects itself automatically, nothing to configure. GitHub: https://github.com/mxmsmnv/Compass
- Last week
-
module Image Library — edit every image across your whole site in one table
Mikel replied to Mikel's topic in Modules/Plugins
Update: v1.0 – out of beta (and nested collections landed) Hi all, after a good run in production across a few sites, we’re finally tagging a stable release: v1.0.2. Quick recap for anyone just finding this: Image Library is a Process module that surfaces every image already sitting in your native FieldtypeImage fields, across every page, template and (Matrix)Repeater, in one cross-site, filterable, inline-editable table, with serious bulk editing, content-based de-duplication and where-used on top. It does nothing to your data and needs no migration. The full story is in the three posts above. Collections, all grown up. What was a flat “tick some images, save them as a tab” feature is now a proper little hierarchy: Folders / nesting. A collection can hold its own images and nest sub-collections, up to 3 levels, like folders that also hold files. There’s no separate “container” type: an empty collection is just one with no images yet. Open a parent and you see the union of its own images plus every descendant’s; remove an image from a parent and it cascades down. A manager dialog. One tabbed dialog (Collections | Bookmarks) to rename, reorder, nest / un-nest and delete, by drag or buttons. Deleting a collection cascades to its sub-collections; the images stay put in the library. A Collections column. A new table column shows the collections each image belongs to (linked), with inline re-assignment via a checkbox tree, for one row or a whole batch selection. Membership shows as a union, so a parent lights up whenever the image is in one of its sub-collections. Team-wide now. One thing changed under the hood: bookmarks and collections moved from per-user storage to a single team store, so the whole editorial team works from the same set. Gated by a manage-shared permission; bookmarks got folders too. And on the phone: the strip collapses to three tabs (Show all / Bookmarks / Collections) with cascading tap-to-open fly-outs, so curation works on touch, not just desktop hover. Search that actually narrows. The search box learned operators: multiple words match any (OR), +word requires, -word excludes, and "a phrase" matches exactly, e.g. red +rose -draft. Across title, description, tags, filename and custom subfields. Why “stable” now. Beyond the features, this release got the boring-but-important pass: uploads on Replace are validated by content and not just by extension, a rename now keeps an image’s “Used in” entry, output is escaped, lookups are hardened, and the codebase went through a sizable DRY refactor with no behaviour change. It has been running real editorial work, so 1.0 felt earned. Status. v1.0.2, first stable. Module + docs on GitHub and the Modules Directory. As always, feedback and edge cases very welcome: deep Repeater / RepeaterMatrix nesting, odd Fieldtype combos in custom-field templates, ProFields, and anything the collections manager or front-end picker trips over. Cheers, Mike -
Hi @ryan, first of all: thank you for creating this module. I have been doing some rigorous testing with Agent Tools, and while I have been quite productive in using this to move a wordpress site into PW, I do keep running into a couple of smaller issues. In no particular order: It seems I cannot run just a single migration from the CLI. The CLI always wants to run all that have not yet been applied. It seems I cannot simply re-run a migration from the CLI. The GUI does allow this. If I want to do this, I first have to rename the php file in assets/at/migrations. It would be very handy if there was a built-in and (agent-)documented way to add CLI --flags to the migrations. Codex has been inventing their own flags, for instance --dry-run=1, --limit=1 etc, but the implementation has been poor and inconsistent. Besides this, what I am wondering is if it will become possible to, instead of using the CLI or UI, to hook up AI directly via MCP. Or should I look at https://github.com/PeterKnightDigital/PromptWire-MCP for that?
-
One of my testers won't be available to test as soon as they thought. If anyone else would like to test MediaHub, please shout (DM). The PW community is pretty diverse. I've had testers from a technical, UI/UX and media background. That variety of interests has really helped improve MH from multiple angles.