Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/07/2025 in all areas

  1. Just in case you ever need some ammo in persuading a client that WordPress is probably not the way to go these days: https://webdesignerdepot.com/the-slow-implosion-of-wordpress-2025-and-the-cms-thats-losing-its-soul/
    3 points
  2. This is really neat and I'm not sure why I didn't have that idea earlier! The filesOnDemand feature now supports callbacks!! 😎🚀 From the docs: Callback Feature Sometimes you want to prevent the filesOnDemand feature to kick in. For example in the RockInvoice module I have a pdf field that stores invoices, but these invoices are protected from direct download by htaccess. When I develop locally this leads to time consuming page requests and HTTP error messages that the requested file could not be downloaded. Callbacks to the rescue! $config->filesOnDemand = function (Pagefile $file) { if ($file->field->name === RockInvoice::field_pdfs) return false; return 'https://my-live-site.com/'; };
    2 points
  3. Hi everyone! @kongondo I’ve been really enjoying testing PWCommerce and exploring its features. I'm currently digging into hookable methods, especially around extending things like the custom checkout customer form. I've reviewed Demo 2, Demo 3, and the hook documentation, and also tried several example hooks shared in the forums, always keeping in mind the transition from Padloper to PWCommerce. That said, I haven’t been able to get any of those hooks to actually trigger, not even a simple log entry. I suspect this might be due to class or method name changes under the hood, but I'm not entirely sure. Does anyone know if there is an up-to-date way to inspect which classes and hookable methods are currently available in PWCommerce? A class map, autoload overview, or even a debugging tip would be super helpful! Thanks in advance!
    1 point
  4. Hi @kongondo! Thanks for this new topic, it might indeed be easier! No worries, please take your time to go through them, I admit not being the most familiar with module building so this also comes as a learning experience 🙂 I'll be getting a good look at it, thanks @bernhard! I've been adding hooks in /site/ready.php, but as soon as I posted a message I got some progress! It turns out that I naively expected "Padloper" parts to simply be replaced by "PwCommerce" and then searched for more documentation 😅 //Original Padloper $this->addHookAfter('PadloperProcessOrder::checkCustomOrderCustomerFormForErrors', null, 'customCheckCustomOrderCustomerFormForErrors'); //Expected edit $this->addHookAfter('PwCommerceProcessOrder::checkCustomOrderCustomerFormForErrors', null, 'customCheckCustomOrderCustomerFormForErrors'); //Actual hook $this->addHookAfter('PwCommerce::checkCustomOrderCustomerFormForErrors', null, 'customCheckCustomOrderCustomerFormForErrors'); Exactly 😉 this is why I didn't offer my help on writing the documentation...yet!
    1 point
  5. My quote of the century
    1 point
  6. @bernhard Having the coldest glass of water in hell doesn't change the fact that you're in hell 🤣
    1 point
  7. @marie.mdna @kongondo I have just indexed PWCommerce as Deepwiki: https://deepwiki.com/kongondo/ProcessWireCommerce Maybe it helps. Maybe it's crap. I don't know 🙂
    1 point
  8. Yep - just tried the dev version and that works for me.
    1 point
  9. XCloud was one of the services I tried, and it was top of our list for a while until we tried to change the default rewrite rule... Whilst xcloud lets you change quite a lot of nginx conf settings you can't change the default rewrite: // PW rewrite rule should be try_files $uri $uri/ /index.php?it=$uri&$args; // but xcloud won't let you change it from try_files $uri $uri/ /index.php?$args; PW has a fallback so that the second rule generally works, so we didn't notice for a week (and after I'd spent a lot of time in xcloud ...). It was only because we came accross an issue with Bernhards live reload that I realised something wasn't right. xcloud support were good, and honestly in most cases I don't think it will matter, but because they weren't able to change it I decided it was probably the sensible move to cross xcloud off of my list. I don't think that the rewrite to 'it=' gets used much and it might be worth asking @ryan to consider defaulting to the other rewrite url which I assume is what WordPress uses and hence the default for a lot of hosts.
    1 point
  10. Hey everyone! Just pushed two quick updates to PromptAI with some improvements: v1.4 Changes New "Overwrite Target" option: You can now choose whether AI responses should overwrite existing content in target fields (disabled by default to protect your existing content) v1.5 Changes Multiple template support per prompt: Configure a single prompt to work across multiple templates – no more duplicate configs! Native ProcessWire forms: Refactored config interface to use proper PW form elements Better template selection: Upgraded to ASMSelect for smoother template picking. This was a bit difficult to combine with dynamic JS fieldset creation and involved some brittle DOM hacking, so if anyone knows a simple way to combine Alpine JS and the ASMSelect JS part, I'd be happy to learn As always, please test thoroughly before going live. Bug reports and feedback welcome on GitHub 😊
    1 point
  11. Hi Bernhard, Does the text contain emojis or special characters? This commonly causes issues with sites I work on. Especially when the database is set to not support MB4.
    1 point
  12. Hi, yes, for an item to be able to have several categories, choose and in the input tab i personnally usually choose as type of field, easire to order, delete and... see for the client 🙂 have a nice day
    1 point
  13. Hey @ryan. After some time off, I’m back, and I can already notice a lot of improvements to the admin theme. Great work! I wanted to touch on the topic of the tight control you have over the project. I think I didn’t explain it clearly before, so let me try again. First off, I truly believe in your intentions and your commitment to ProcessWire — that’s never been in question. My perspective is just from someone looking at things with fresh eyes. Since this project has been with you for over a decade, it’s totally natural that some aspects might go into autopilot or get a bit of tunnel vision. What I meant by "tight control" is that it feels like most things — or nearly everything — end up depending on you. A few things that stood out to me: You're the only one who can commit. That can give the impression that there's a lack of trust in the community. I get that quality matters, but even the most successful open-source projects had to open up at some point. There are many long-time users and proven professionals here who could help with small fixes and improvements — which would make things move faster and ease the burden on you. The master branch is still the default, even though folks on the forum have already pointed out that switching to the dev branch might help newcomers see the project as more active. The development of the new admin theme, while impressive, also felt like a missed opportunity to leverage community input earlier in the process. What exactly does “community” mean in this project? For many of us — like @bernhard and others — PW isn’t just a hobby, it’s the foundation of a businesses. That’s why transparency and shared involvement matter so much. And just as a practical thought — what would happen if, for some unforeseen reason, you were no longer able to maintain the project? Things like GitHub access, the website, and the forum are all critical. It might be worth thinking about a foundation or even just a small board to help guide the future of PW together. That’s the kind of "tight control" I was referring to, and I hope this version makes more sense. Again, I really do appreciate everything you’ve built — and I say all this in the spirit of constructive feedback and shared care for the future of the project. All the best!
    1 point
  14. Just edit your first post and append a [solved] to the topic field.
    1 point
  15. Solved it … another module (CustomUploadNames) wasn't compatible under 8.x and blocked the field upload from working. Not sure how to set it to "solved" … but it is 🙂
    1 point
  16. I'll be on the road today picking up my daughter from a summer camp that’s 4 hours away. So I'm spending the day in the car rather than at the computer. As a result, I don’t have anything major to report this week, but wanted to say hello before I left for the day. Progress continues on everything we’ve talked about in recent weeks. I’m also working on a client project, building a ProcessWire based login portal that is kind of a front-end to a Salesforce system. It uses LoginRegisterPro, FormBuilder and ProFields Custom Fields. I’m making some improvements to those 3 modules as I go. For instance, LoginRegisterPro will be getting an email-to-login option. When enabled, if you submit the login form but leave the password blank, it’ll email you a link to automatically login. The feature is optional and not enabled by default. More next week. Thanks for reading and have a great weekend!
    1 point
  17. Hey @bernhard - good catch. New version supports searching whatever is in the label.
    1 point
  18. @adrian sorry for causing work 🙈 Seems like the "find user" filter input does not filter mail addresses even though I set the config of the panel to "{name} ({email})". Maybe you can address this at some point as well? Thx a lot!
    1 point
  19. Hey @bernhard - I revised the last commit so now you can use tags. The default is now set to: {name} ({email}) Hope that helps you and others.
    1 point
  20. Hey @bernhard - I didn't come to the forum to see your updated suggested about the email in brackets and already added the custom label field option, so hope that's ok.
    1 point
  21. PromptAI Module Update V1.1: New Config UI & Individual Buttons! 🎉 Hey everyonre, I just pushed an update to the PromptAI module that replaces the old textarea configuration with a proper form interface at Setup > Prompt AI. No more typing template::source::target::prompt manually – now you get actual fields and buttons like a civilized person! 😄 I also added an "Individual Prompt Buttons" option that lets you create separate "Save + [Custom Label]" buttons for each prompt configuration instead of one generic button. So you can have "Save + Create Summary", "Save + Generate Alt Text", etc. and run just the specific prompt you want. Existing configs migrate automatically, so updates should run smoothly. Feedback welcome as always. The module has now been added to the ProcessWire module list: https://processwire.com/modules/prompt-ai/
    1 point
  22. Padloper is dead! Long live Padloper! It is official! Padloper is now ProcessWire Commerce. ProcessWire Commerce is a free, open-source fully featured e-commerce module (plugin) for building and managing fully function online shops (stores) in ProcessWire. It is flexible, extensible, highly customisable, scalable, robust, multilingual by design and battle tested. Pro Support ProcessWire Commerce is designed to be easy to develop with and to use. For some, you might need extra reassurance that professional help will be available if you need it. Or, you might have a question about how to perform a certain thing or wish to support the project to ensure that any issues are dealt with quickly. Or you might want to sponsor a particular feature. If this is you, Pro Support and custom development can be purchased from my website. Community Support These forums. Donations If you value my work or my work helps support your work or you just want to say thanks, please consider donating. Thanks! Requests Modalities are still being worked out. Please note: I'll add features at my own pace; if and when I can (reasons for this discussed elsewhere in the forums). I'll focus on security, PRs and maintaining the project and major bug fixes. I hope community will contribute. Sponsored (pay for a feature) features: This can be by individuals or community driven. Please contact me for availability. Known Bugs ProcessWire Commerce Admin GUI is broken in the new admin theme, i.e., ProcessWire 3.0.248 (or newer). Save + Exit and similar broken on some pages at some recent ProcessWire version. Manually order creation broken (backend). Please file bug reports in the repo here - https://github.com/kongondo/ProcessWireCommerce/issues. Contributing This is a community project. All contributions are welcome! We are still working out how the 'how'. Documentation Please see this thread. Other Important Stuff Migrating from Padloper. Community help request. Tech Stack ProcessWire (PHP). Vanilla JS htmx Alpine JS Tailwind CSS MySQL Download Here you go!
    1 point
  23. ProcessWire Commerce is a free, open-source fully featured e-commerce module (plugin) for building and managing fully functional online shops (stores) in ProcessWire. It is flexible, extensible, highly customisable, scalable, robust, multilingual by design and battle tested. The current features are: Core Features Product Management: Create and manage unlimited product listings with options for unlimited variations, pricing, and descriptions. Support for 4 product types: Physical with shipping, physical without shipping, digital and services/events. Optionally track stock. Order Management: Process and manage orders, handle refunds, print invoices and communicate with customers. Frontend order placement and backend manual order creation. Shipping Options: Configure shipping methods, rates, handling and zones based on location and product type. Rates can be tiered and based on weight, price, quantity or flat. Support for 'rest of the world' shipping. Tax Management: Calculate and apply taxes automatically based on location and product type. Prices can include/exclude taxes. Tax overrides can be added to product categories (collections) and/or shipping. Analytics & Reporting: Gain insights into sales, customer behavior, and product performance. Payment Gateways: Integrate with numerous payment processors to securely accept online payments. Invoice, Stripe and PayPal included by default. Easily add your preferred gateway. Optional Features Inventory Management: Track stock levels, manage back-orders, and set up low stock notifications. Product Categories (collections). Product Tags. Product Attributes (for product variants, e.g. colour, size, etc). Product Types: 'Phones', 'Books', 'Shirts' and so on. Product Brands: Create and manage shop product brands/vendors/manufacturers. Product Properties: Further describe products based on various properties such as 'Colour', 'Grade', 'Weight', etc. Product Dimensions: For instance, 'Centimetres', 'Kilograms', 'Litres', etc. For use with Product Properties. Downloads; Digital products or files that accompany a product such as 'tickets', 'manuals', and so on. Discounts: Redeemed by customers or applied automatically at checkout. Support for four types: Fixed, Percentage, Shipping and Buy X get Y (last one is WIP). Discounts can be applied to whole order, parts of it, to select customers or countries. Customer Management: Create and manage unlimited customers. Can be created at checkout (using the API and/or hooks) or manually in the backend. Email customers directly from admin. Customers can have multiple addresses. Customer Groups: Create and manage unlimited customer groups Add customers to as many customer groups as needed. Customer groups can be targeted for marketing, promotions, etc. Legal Pages: Create and manage legal pages such as 'Shipping Policy', etc. Gift Cards: WIP. Move some pages from /admin/shop/ to a parent in the home tree. With your help, we can add more features 😀!
    1 point
  24. I'm surprised a textarea field value can be null rather than an empty string. Maybe something to do with multi-language. I'm casting $text to string in v0.1.3 so hopefully fixed. Thanks for the report.
    1 point
  25. Good idea, I've done that in v0.1.2
    1 point
  26. @bernhardIn this test, I didn't want to install benchmark tools, so I just used PHP (code below) with the following results: test 1) Elapsed Processwire Boot time Apache/2.4.62: 0.1405s Page load time: 6.53 ms Database query time: 0.5 ms Memory used: 325.21 KB Elapsed Processwire Boot time nginx/1.26.1: 0.1175s Page load time: 4.68 ms Database query time: 0.65 ms Memory used: 256.13 KB test 2) Elapsed Processwire Boot time Apache/2.4.62: 0.2145s Page load time: 6.42 ms Database query time: 0.45 ms Memory used: 325.21 KB Elapsed Processwire Boot time nginx/1.26.1: 0.1512s Page load time: 4.86 ms Database query time: 0.64 ms Memory used: 256.13 KB test 3) Elapsed Processwire Boot time Apache/2.4.62: 0.1809s Page load time: 48.97 ms Database query time: 0.7 ms Memory used: 325.21 KB Elapsed Processwire Boot time nginx/1.26.1: 0.0909s Page load time: 4.65 ms Database query time: 0.64 ms Memory used: 256.13 KB <?php $home = $pages->get('/'); /** @var HomePage $home */ $start_time = microtime(true); $start_memory = memory_get_usage(); $start_query_time = microtime(true); $pages = $pages->find("template=basic-page"); $query_time = microtime(true) - $start_query_time; ?> ?><!DOCTYPE html> <!-- STANDARD >main.php body--> <?php $end_time = microtime(true); $page_load_time = $end_time - $start_time; $end_memory = memory_get_usage(); $memory_used = $end_memory - $start_memory; $elapsed = Debug::stopTimer($timer, 's'); // Debug::startTimer in index.php ?> <div> <p>Elapsed Processwire Boot time <?php echo $_SERVER['SERVER_SOFTWARE'] . ': ' . $elapsed ?><br> Page load time: <?php echo round($page_load_time * 1000, 2); ?> ms<br> Database query time: <?php echo round($query_time * 1000, 2); ?> ms<br> Memory used: <?php echo round($memory_used / 1024, 2); ?> KB</p> </div> </body> </html> Breakdown of results: Elapsed ProcessWire Boot Time: NGINX consistently shows lower boot times, indicating it may handle PHP requests more efficiently than Apache in this test case. Page Load Time: The page load time in the third test for Apache (48.97 ms) is an anomaly I can't explain. Caching? Network latency? Database Query Time: Apache and NGINX have similar query times Memory Used: Memory usage is relatively low, and the difference between the two servers is not substantial.
    1 point
  27. Here's the full vhost file for one of my PW sites that uses ProCache. (Note that I've changed the real domain to example.com, and the ProCache string to "ProCache-xxxxxxxxxxxxx".) server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; {{ssl_certificate_key}} {{ssl_certificate}} server_name example.com; return 301 https://www.example.com$request_uri; } server { listen 8080; listen [::]:8080; server_name www.example.com www1.example.com; {{root}} index index.php index.html; } server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; {{ssl_certificate_key}} {{ssl_certificate}} server_name www.example.com www1.example.com; {{root}} index index.php index.html; {{nginx_access_log}} {{nginx_error_log}} if ($scheme != "https") { rewrite ^ https://$host$uri permanent; } location ~ /.well-known { auth_basic off; allow all; } {{settings}} location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map)$ { add_header Access-Control-Allow-Origin "*"; expires 48h; access_log off; try_files $uri $uri/ /index.php?it=$uri&$args; } # Block access to ProcessWire system files location ~ \.(inc|info|module|sh|sql)$ { deny all; } # Block access to protected assets directories location ~ ^/(site|site-[^/]+)/assets/(cache|logs|backups|sessions|config|install|tmp)($|/.*$) { deny all; } # Block acceess to the /site/install/ directory location ~ ^/(site|site-[^/]+)/install($|/.*$) { deny all; } # Block dirs in /site/assets/ dirs that start with a hyphen location ~ ^/(site|site-[^/]+)/assets.*/-.+/.* { deny all; } # Block access to /wire/config.php, /site/config.php, /site/config-dev.php, and /wire/index.config.php location ~ ^/(wire|site|site-[^/]+)/(config|index\.config|config-dev)\.php$ { deny all; } # Block access to any PHP-based files in /templates-admin/ location ~ ^/(wire|site|site-[^/]+)/templates-admin($|/|/.*\.(php|html?|tpl|inc))$ { deny all; } # Block access to any PHP or markup files in /site/templates/ location ~ ^/(site|site-[^/]+)/templates($|/|/.*\.(php|html?|tpl|inc))$ { deny all; } # Block access to any PHP files in /site/assets/ location ~ ^/(site|site-[^/]+)/assets($|/|/.*\.php)$ { deny all; } # Block access to any PHP files in core or core module directories location ~ ^/wire/(core|modules)/.*\.(php|inc|tpl|module)$ { deny all; } # Block access to any PHP files in /site/modules/ location ~ ^/(site|site-[^/]+)/modules/.*\.(php|inc|tpl|module)$ { deny all; } # Block access to any software identifying txt files location ~ ^/(COPYRIGHT|INSTALL|README|htaccess)\.(txt|md)$ { deny all; } # ProCache Rules set $cache_uri $request_uri; if ($request_method = POST) { set $cache_uri 'nocache'; } if ($request_method = HX_REQUEST) { set $cache_uri 'nocache'; } if ($http_cookie ~* "wires_challenge") { set $cache_uri 'nocache'; } if ($http_cookie ~* "persist") { set $cache_uri 'nocache'; } # ----------------------------------------------------------------------------------------------- # This location processes all other requests. If the request is for a file or directory that # physically exists on the server, then load the file. Else give control to ProcessWire. # ----------------------------------------------------------------------------------------------- location / { expires -1; try_files /site/assets/ProCache-xxxxxxxxxxxxx/$cache_uri/index.html $uri $uri/ /index.php?it=$uri&$args; } location ~ \.php$ { include fastcgi_params; fastcgi_intercept_errors on; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri =404; fastcgi_read_timeout 3600; fastcgi_send_timeout 3600; fastcgi_param HTTPS "on"; fastcgi_param SERVER_PORT 443; fastcgi_pass 127.0.0.1:{{php_fpm_port}}; fastcgi_param PHP_VALUE "{{php_settings}}"; } if (-f $request_filename) { break; } } Hope this helps.
    1 point
  28. Sounds terrible! Surprisingly they have quite good ratings here https://www.wpbeginner.com/hosting/wpengine/ and here https://www.trustpilot.com/review/wpengine.com
    0 points
×
×
  • Create New...