Peter Knight
Members-
Posts
1,389 -
Joined
-
Last visited
-
Days Won
5
Peter Knight last won the day on May 16 2016
Peter Knight had the most liked content!
Contact Methods
-
Website URL
https://www.edenstudios.com
Profile Information
-
Gender
Male
-
Location
Dublin, Ireland.
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
Peter Knight's Achievements
-
Hey thanks @elabx I guess so! If other people find it useful and can build upon it then that would be great. I've just added support for Matrix items and a related Module, which is essentially a front-end (in Processwire) for managing import and export. The only issue is I'm not very familiar with open-sourcing a Module and all the pull requests etc etc. But I suppose if it's open source then other people can handle that too?
-
I always ask Cusror to summarise the changes because it's much better at writing than me so here they are: What We Built Today The Problem Previously, to edit ProcessWire content, you had to either: Log into the admin panel and use the web interface Or ask the AI to read page content, but it couldn't write back The Solution We added Pull/Push sync — a Git-like workflow for ProcessWire content: Pull a page from ProcessWire → saves it as an editable YAML file Edit the YAML in your IDE (or have AI edit it) Push the changes back → updates the live page Key Features Feature Description Natural language -> Just say "Pull the About page" in Cursor chat Mirrored folders -> Pages save to site/syncs/[page-path]/ matching your site structure Readable YAML -> Content is human-editable, not database dumps Readable dates -> Dates show as 2026-01-27 not Unix timestamps Dry-run by default -> Push shows what would change before applying Conflict detection -> Warns if someone else edited the page since you pulled Revision tracking -> Each pull stores a hash to detect remote changes What Works Now Pull any page by path or ID Edit text fields, titles, SEO fields, dates Push changes back to ProcessWire Re-pull to get latest version What's Not Yet Implemented Editing RepeaterMatrix content (the complex page builders) Uploading/changing images and files Bulk pull/push of multiple pages Creating new pages Example Workflow You: "Pull the blog post about the Lake District" AI: Finds and pulls it to site/syncs/news/posts/lake-district-walks/page.yaml (this mirrors the page path/slug) You: Edit the YAML file + save You: "Push the Lake District walks page" AI: Shows preview, then applies changes to ProcessWire and updates the 'real' PW page
-
Ok, Phase 2 is working.... I can now say to Cursor... Get any page with "Lake Windermere" in the title Processwire will create 2 local files in site/syncs... 1 x YAML version of the file listing all fields, content etc and understads to ignore HannaCode placeholders 1 x sidecar file listing the meta data to save AI tokens In the site/syn folder, these pages are created using the matching directory structure of the page paths, so it's essentially like the PW tree I can then edit the YAML and tell Cursor to push the page back to P,W and the page is updated
-
I should clarify - I used Cursor itself to build this with Opus. I gave it a comprehensive PRD and built it in plan mode.
-
Peter Knight started following Best approach: 3 versions of same digital product , Cursor MCP to Processwire , ProcessDbMigrate and 3 others
-
I wanted a way to chat with my Processwire site and built a Module (PW MCP) and an MCP server to connect into it. It's a private repo at the moment but it can be public if anyone finds it useful. It's basically a way to use the Cursor Chat Ui to query my site, fields, templates and content. Here's part of the readme which explains it better. What Is It? ProcessWire MCP is a bridge between ProcessWire and Cursor IDE (the AI-powered code editor). It lets you query your ProcessWire site's structure and content directly from Cursor's chat interface using natural language. Instead of writing selectors or browsing the admin, you can just ask: "What templates does this site have?" "Show me the fields on the blog-post template" "Search for pages containing 'summer'" "Find all images with 'lake' in the filename" Why I Built It Cursor can see your template files and code in the local directory, but it can't see what's actually in your ProcessWire database — which templates and fields are registered, what pages exist, or what content they contain. With ProcessWire MCP, the AI can: Query the actual database schema (not just parse template files) Look up page content by ID, path, or selector Understand field configurations (types, settings, which templates use them) Search across all text content and find files/images Get RepeaterMatrix content with type labels See file metadata (dimensions, descriptions, URLs) It's the difference between seeing $page->body in code vs. knowing what that page's body actually contains. Architecture Cursor Chat → MCP Server (Node.js) → PHP CLI → ProcessWire API The module consists of: PwMcp — A ProcessWire module with a CLI interface mcp-server — A Node.js server that speaks the Model Context Protocol The CLI can also be used standalone for quick queries from terminal. Available Commands Command Description health Check connection and get site info list-templates List all templates with field counts get-template [name] Get template details and fields list-fields List all fields with types get-field [name] Get field details and usage get-page [id\|path] Get page by ID or path with all field values query-pages [selector] Query pages using PW selectors search [query] Search content across all text fields search-files [query] Search files by name/extension export-schema Export complete site schema Example: Health Check php site/modules/PwMcp/bin/pw-mcp.php health --pretty { "status": "ok", "pwVersion": "3.0.241", "siteName": "www.example.com", "moduleLoaded": true, "counts": { "templates": 45, "fields": 72, "pages": 960 } } Example: Content Search Ask Cursor: "Search for pages containing 'summer'" { "query": "summer", "count": 5, "results": [ { "id": 1764, "title": "Lake District walks in summer", "path": "/guides/lake-district-summer/", "template": "page-guide", "matchedField": "Body", "snippet": "The Lake District offers some of the best walking trails in summer. From gentle lakeside strolls to challenging fell walks..." } ] } Example: File Search Ask Cursor: "Find images with 'lake' in the filename" { "query": "lake", "count": 5, "results": [ { "filename": "lake-windermere-sunset.jpg", "url": "/site/assets/files/1070/lake-windermere-sunset.jpg", "size": 31207, "sizeStr": "30.5 kB", "description": "Sunset over Lake Windermere", "field": "Images", "page": { "id": 1070, "title": "Lake District walks in summer", "path": "/guides/lake-district-summer/" }, "width": 500, "height": 626 } ] } Example: Get Page with All Fields Ask Cursor: "Get the page at /about/" { "id": 1050, "name": "about", "path": "/about/", "url": "/about/", "template": "basic-page", "status": 1, "statusName": "published", "parent": { "id": 1, "path": "/", "title": "Home" }, "numChildren": 5, "created": "2023-05-15T10:30:00+00:00", "modified": "2024-11-20T14:22:00+00:00", "fields": { "title": "About Us", "body": "<p>We are a team of dedicated professionals...</p>", "Images": { "_count": 2, "_files": ["team-photo.jpg", "office.jpg"] } } } Example: RepeaterMatrix Support The module fully supports RepeaterMatrix fields, returning the actual content with type labels: { "matrix": { "_count": 3, "_items": [ { "_typeId": 1, "_typeLabel": "Body", "Body": "<h2>Welcome to our guide</h2><p>This guide covers...</p>", "Images": null }, { "_typeId": 2, "_typeLabel": "FAQs", "faq_question": "What is the best time to visit?", "faq_answer": "The summer months offer the best weather for walking..." }, { "_typeId": 3, "_typeLabel": "Call to Action", "cta_title": "Plan Your Visit", "cta_link": "/contact/" } ] } } So thats the first part done and working. My next plan is to be able to 1. PULL / convert a databse page into a local text file which lists all page properties, fields, template etc 2. edit the file as a local text file 3 PUSH the text file back into PW so that the original content picks up the changes Just having fun and building something useful. Very likely there are similar solutions or better ways to handle this but this suits my workflow ATM. Cheers P
-
Hey Mike I understand you're not developing it personally anymore. If someone were to add a new feature and submit a PR is that something beyond lingering issues? IE they're best to fork it or even take over as maintainer?
-
Hey I've been building a few React based apps for the first time and one of them required a blog. I started to explore MDX files with YAML for a fast blog launch. I found it refreshingly simple and I loved the databaseless setup, the flat file system, the versioning etc. As my requirements and content grew, I kept finding myself trying to do things which Processwire already does and does beautifully. Things like.. treeview and nice UI keeping track of changing redirects providing a front end UI for posts and a 1000 other things we all know and live PW for. My question is, is there a way to combine the two? Challenge 1 I'm wondering if I could have a local install of PW acting as the blogging engine and the front-end UI I could then export a page as an MDX file to my React Apps /blog/posts/ folder and my React App can pickup Challenge 2 Another element why I love the flat file MDX approach is I am bulk generating a lot of content and I can use AI to quickly create new documentation and blog pages. If I had 10-100 MDX files, I would like Processwire to be able to import /scan these pages and auto update the tree and auto import various chunks of content into fields. I *dont think* I can use AI to quickly generate multiple pages of content in PW at scale but I have never really explored the UI. So as you guessed, I am not 100% sure of my requirements but keen to hear how others handled similar integrations. Thanks P
-
Isnt this just Apples new inbuilt password manage trying to be helpful? You should be able to prevent it either on the browser level or globally via the Settings?
-
In your example code you have the first before the image. Was that the issue. IE needed images->first()->url
-
Hey 👋 I'm running a PW site on UIKIT (v3) for many years and I want to migrate to TailWind V4. Sounds fairly simple. I normally just locally update my templates and CSS. This time, I want to do add in TW templates concurrently. The idea is I can add/remove content as normal and I thought a good approach might be 1. I have a template switcher in my config $config->twPreview = true; // Enable Tailwind templates 2. I have a template switcher hook in site/init.php which updates my css paths etc with a _tw (Tailwind) path 3. All my templates have a duplicate called [template-name]_tw.php Same for all my includes It's not going too bad but I didn't factor in for the following 1. I have Matrix field templates and een though I can duplicate with a _tw, the actual field files are hard coded into the PW manager when editing a page Aside from this, it's not going too bad but am I overlooking a simpler method? Cheers
-
Thanks @breezerThat first answer was a big help.
-
Hi I’m trying to find an up to date tutorial on enabling remote page creation via API? I’m building a localhost tool / project and want to use that to create new pages in a target site. I can find lots of API docs but unsure of the first steps on target site. Thanks
-
Hi I understand many of you use Git and I've started to use it more lately in conjunction with Github and GitHub Desktop app. I was wondering what the best approach might be when you've built something you're happy with but then want to create 2 furthers versions of this. IE in terms of git and branches, would you create 2 further branches? Would you instead make 2 local clones of your repository? Lets call these versions Basic, Better and Best. My core product is a PHP page which pulls in JSON data. This Basic version is ready and I have a git repo and have been making commits to a branch called 'Dev'. I now want to create a version with enhanced features which uses the same PHP and JSON files but is called: Better and uses enhanced UI V2 more JSON data introduces some basic imagery Concurrently, I want to build Best which has enhanced UI V3 more JSON data introduces photography Thanks P
-
MarkupSEO - The all-in-one SEO solution for ProcessWire.
Peter Knight replied to Nico Knoll's topic in Modules/Plugins
Hi is there a way to override a Meta Tag with this Module? My implementation has: <meta name="robots" content="index, follow"> But on one particular template, I want to NOINDEX and have added to the Custom field <meta name="robots" content="noindex"> Unfortunately and as expected, my page now has both NOINDEX and then INDEX robots instructions. Thanks -
Hi @Matzn Was this referring to the /processwire/ manager login? I just had a similar issue and it was caused by my server having an incorrect time (-1 hour).