Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 01/29/2026 in Posts

  1. Thank you for sharing your invaluable work and contributions @bernhard! You had a lot of options with how to move forward and I believe that open sourcing your modules ensures that your work carries on into the future and continues to benefit both ProcessWire developers and users alike. I do want to share some thoughts and contribute to what @bernhard said about "feature complete". Most of the modules you have built are indeed robust and offer a large number of features that are implemented well and will continue to bring value long into the future. Modules like RockPageBuilder offer a solid set of features and are built in a very extensible and customizable way that puts a lot of power in the hands of developers. If any are reading this and are just finding out about it or have not yet had a reason to use it yet, I highly recommend taking a look! Other modules like RockMigrations have become staples in my workflow and will continue to be. Whether new features are added or not, the utility and quality of these contributions stand on their own. I also want to share some thoughts with the greater community. ProcessWire is a powerful tool that is developer-focused and easy to use for beginners while being powerful enough for advanced applications and more senior developers. It's one of the reasons we all love working with this platform. It also means that this community is comprised of people of many levels of skill and creative abilities. These are the factors that make open source software work. Whether you're working with the core or a module from any developer that is open source, your contributions matter and they are a way to "pay it forward" and give back to the community that makes your work possible. The vast majority of modules are free to download and use, and that "free" to you comes at a cost to module and core developers in both programming and support time. These are hours spent beyond our professional life. Nights and weekends, and breaks from our jobs to respond when something is urgent. Keep the developers in mind and remember that burnout is a real thing in the open source community. Greater involvement and contribution helps that greatly and also helps the developers you rely on for quality code you use stay engaged and make offering their work to the community enjoyable. Many hands make for light work. If you're using a module and run across an item that can be improved, a bug that hasn't been reported yet, or have an idea for a new feature then please consider forking, contributing, and pushing upstream via PRs on Github. If you are able to see something, take a moment to try and find a solution- I guarantee it will always be greatly appreciated and your efforts will not go unnoticed. You'll find some of mine coming to @bernhard modules in coming weeks. If you haven't contributed to open source before or find the process intimidating, please consider a module contribution for your first time out. The thoughtfulness and helpful attitudes here in the forums continue on module Github repositories. Those repository owners and module maintainers are the same people who are members of one of the greatest developer communities around. Never forked a repository or opened a PR before? Anyone with experience here is ready to help. You'll level up your skills, increase your confidence, and the satisfaction you'll feel cannot be overstated. These can be as simple as small changes to make a code base compatible with a new version of PHP, or a little tweak to some JS! I wanted to take a moment to mention this here because the release of these modules, much like those that were open-sourced by @kongondo and others, have a future through contribution. I don't mean to hijack your thread @bernhard but I think what you have shared offers a great opportunity to communicate these ideas in appreciation and encouragement to others. Thank you again @bernhard for the wealth of knowledge you openly share here and the guidance that you have offered to others. It is inspiring and, on a personal note, has immeasurably advanced my knowledge and confidence as a ProcessWire developer. @Jim Bailie The concept of a paid platform for modules has been discussed by many both in public and private. I don't know that there's a single answer to that question. Hopefully that may come about one day, it would mean a lot to the sustainability of ProcessWire. When it comes to taking a shop from concept to reality from a community standpoint it always comes down to "if not me, then who?". Should Ryan take time from the core to build it? Maybe it would be better for a team to collaborate and offer help to create an official channel. I think what I mentioned above underscores the importance of not relying on one person to solve the problem. I'm sure Craft had a team of people working together to make their shop come to life and also requires work to keep it going. If one person did all of it for Craft I would be truly shocked. Hey- RockCommerce is open source... maybe it's a starting point 😎
    3 points
  2. You would need to use an SQL query to first get the IDs of matching pages, then use those IDs in a PW selector. MySQL has a DAYOFWEEK() function but it starts the numbering on Sunday which is easy to forget. So probably better to use the DAYNAME() function instead. // Get the IDs of all pages where the day name of the date value is Monday $fieldName = 'event_date'; // The name of your date field $tableName = "field_$fieldName"; // The table name is the field name prefixed with "field_" $weekday = 'Monday'; // The day of the week you want to match $stmt = $database->prepare("SELECT pages_id from $tableName WHERE DAYNAME(data) = :weekday"); $stmt->bindValue(':weekday', $weekday); $stmt->execute(); $ids = $stmt->fetchAll(\PDO::FETCH_COLUMN); $idsStr = implode('|', $ids); // Find PW pages $items = $pages->find("template=event, id=$idsStr");
    3 points
  3. 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
    2 points
  4. Hi, I'm not sure it's very useful if you're neither French nor seriously obsessive, but just in case... In French, when using a CKEditor or TinyMCE field, it is easy to insert a non-breaking space before exclamation marks, question marks, colons, semicolons, and so on, so that they do not wrap to the next line on their own, at the end of a sentence or in the middle of one. This is not possible in simple text fields, single-line fields, or non-rich-text textarea fields and this often causes formatting issues that are not very β€˜attractive’, especially in responsive usage, remember, i said obsessive πŸ˜‚. So I created for myself a small textformatter module that allows you (well pw for you actually) to insert a non-breaking space before or after certain specific characters in a text or textarea field. It's completely useless and should not be used in a rich-text field, but if it's ever useful to anyone, it's available on GitHub at this address. https://github.com/virtualgadjo/Processwire-module-espaces-insecables-dans-champs-text have a nice day
    1 point
  5. Included are more than 70 issue fixes and 175 commits. Here we’ll zoom in on the numerous new features and improvements to the core for one of our best new versions yet! https://processwire.com/blog/posts/pw-3.0.255/
    1 point
  6. Hey @Stefanowitsch I think this should be fixed on the dev branch. Can you please confirm? Note that you need to create new events as old events might have some messed up end dates in the database! There was an issue in how those timestamps have been calculated and thus we had wrong dates in the database, which makes sense that your selector also failed to return the correct events.
    1 point
  7. 1 point
  8. Hi. I have latest version of PW and I have your module installed few days ago. That was version 1.1.0. Now when I check updates I see version 1.1.2. After download from PW and update it still shows 1.1.0 and that there is new version 1.1.2. I tried to download and install module manually, but it is always the same. Why is not PW recognizing update for your module?
    1 point
  9. Edit: Bernard's announcement here begs the question, for me at least: Why is there no centralized sales channel, a'la CraftCMS where Processwire modules can be sold? Maybe this has been discussed before, but maybe it's worth repeating.
    1 point
  10. Hi @Mikel, thank you for sharing this module! I am currently going through first attempts to use this module. In my case I am trying to get (a database dump of) a WordPress site into PW. During my process I bumped into a couple of things, you may or may not be aware of: There is no warning if the uploaded file is too big, for instance due to upload_max_filesize being set too low. If the module cannot figure out a Suggested Title Field for a table, there is no way to define this yourself and the dry run will fail early (in MappingEngine::createMapping). Also there is no way to select another column as source for the title field. I think the limits don't work as intended (at least when importing SQL). When setting the sample_size to 100, and maximum_rows to 0, it will still only import 100 rows of data per table. Again, thanks for setting this all up! --- (PS, I kept running into issues while attempting to modify your module, so for now I have moved on to building a WP-scraper that leveraged the built-in rest-api.)
    1 point
  11. Thx for your support! Hope the modules will be useful for you. It's public now, thx for letting me know! πŸ™‚ I have released my first open source PW module 9+ years ago and I have realised that nothing of what you mentioned pays my bills πŸ˜‰ And all you mentioned is equally true for paid modules - the difference being that making money allows you to dedicate more time and thus provide even better solutions/docs/support. Or tackle problems that would otherwise not be possible to tackle. I think PW and all of us would benefit a lot more if we had a working ecosystem for paid modules and a larger market to sell the modules to. I just don't see that happen and that's why I had to give up and find another way. So I have a bit of a problem calling it "inspiring". I hope it is not and others find a better way. Open sourcing my modules was really just about minimising damage (for myself and my clients). If others benefit from that decision, that's great - but it was not the reason and I would not recommend anybody to take this as inspiration. πŸ™‚ Thank you πŸ™‚ Hey @Ivan Gretsky thank you very much. I think your post is spot on and you are asking some very good questions. Some very important questions. The problem that I have is that I think that those questions are not only important to you but would also be important for the PW project. I'm not sure who you are asking for? If you are asking for PW and try to push it forward, I'm sorry, I can't answer that here in a public thread unless I'm asked from an official source and get the feeling that the people in charge are interested. I hope you understand, but I don't want to burn my energy πŸ™‚ If you are asking for yourself, though, I'm happy to share anything I have learned, observed, experienced in a personal chat with you. Just drop me a line and we can meet and talk about it. Would be nice to meet you after such a long time!
    1 point
  12. Is my 100th post I wanted to do something special. I edited a video, hope you like it Just for fun Edited: Now with subtitles
    1 point
  13. As some of you might know from my monthly newsletter I have been struggling with how to proceed with my commercial modules. It's a long story, but last year I reached a point were something had to change. The main problem is that building and selling modules for ProcessWire has never been sustainable for me. Not even close. It has been a lot of work to build the shop. It has been a lot of work to provide proper docs. It has been a lot of work to create videos about the modules so that interested people can get an idea of my modules. That's fine. I knew it would probably not be easy. But I wanted to try πŸ™‚ You never know if you don't try. And I've had hope that it is possible. Unfortunately I don't have this hope any more and that's why I have to draw a line under it. That's also fine. I've learned a lot and I'm really thankful for anybody that has sent some Euros to a stranger that they have never met in person and that excludes any refund πŸ˜„ So for me the decision was taken. It took me quite some time to get there, but here we are. There was just one problem left: My clients. They have put trust in me and I didn't want to disappoint them. Just drawing a line might be a good solution for myself but might be a terrible solution for them (and their clients as well). Just not providing updates and keeping selling them is also not my style. With open sourcing my modules I try to find the best solution for everybody involved and I want to especially thank @FireWire for helping me get there πŸ™‚ What does that mean? I'm using my modules in many of my own projects, which means that I will likely keep them alive for some time. On the other hand I don't plan to develop a lot of websites any more and many modules are somewhat feature complete as @FireWire helped me to realise, so there are no bigger updates planned for any of my modules at this time. Also, none of my modules is tested with the new admin theme. If you want to help out on that front, I'll be happily merging PRs, but as I'm not using it myself I'm not going to fix any issues or adding support for it in my spare time. So if you want to keep using my modules: Go ahead and have fun! πŸ™‚ If you find the modules helpful it's always nice to let me know. Hope this is a good solution for everyone! Thx for reading and all the best.
    0 points
Γ—
Γ—
  • Create New...