-
Posts
77 -
Joined
-
Last visited
-
Days Won
20
Everything posted by maximus
-
Yeah, yours feels more like an admin-focused tool for one-shot operations, while mine went in a slightly different direction. Same tree trunk, just one has deeper roots and the other has wilder branches ๐ Honestly, it all started because they gave me $50 in credits for Claude Opus 4.6 and I wanted to test what it could actually build. My very first prompt to it was roughly: โCreate a plugin that connects AI to a ProcessWire website, something like the TeleWire you made for Telegram. Use the standard approach, add support for Anthropic, xAI, OpenAI, OpenRouter โ so you can add multiple API keys and it clearly shows whether each one is working or not.โ โฆand then, well โ ยซAnd then Ostap was offยป ๐ (That famous line from Ilf & Petrovโs The Twelve Chairs when Ostap Bender gets carried away and canโt stop spinning taller and taller tales.) From that one simple request it just snowballed into the full AiWire module you see now.
-
Hi everyone! I've built AiWire โ a module that connects ProcessWire to AI providers (Anthropic, OpenAI, Google, xAI, OpenRouter). GitHub: https://github.com/mxmsmnv/AiWire What it does $ai = $modules->get('AiWire'); // Simple call echo $ai->chat('What is ProcessWire?'); // Generate multiple fields at once $ai->generate($page, [ ['field' => 'ai_overview', 'prompt' => "Write overview..."], ['field' => 'ai_seo_meta', 'prompt' => "Generate meta..."], ], ['cache' => 'W']); // Auto-fallback if provider fails $result = $ai->askWithFallback('Translate this...', [ 'provider' => 'anthropic', 'fallbackProviders' => ['openai', 'google'], ]); Main features Multiple API keys per provider with auto-failover Connection testing from admin Interactive Test Chat with parameter controls File cache with TTL (day/week/month/year) Save AI responses to page fields Multi-turn conversations Full docs with 25 real-world examples Requirements PHP 8.1+, ProcessWire 3.0.210+, cURL, and at least one API key. If you try it out, I'd love to hear your feedback โ whether the API makes sense, if the docs are clear, or if you run into any issues. Thanks! ๐
-
Today I updated the information about Processwire on the wiki. If you have anything to add, you know where to find the page. https://en.wikipedia.org/wiki/ProcessWire
-
@adrian You're absolutely right, poor choice of words. I should have said "universally available and free" rather than "already installed". The point was about accessibility vs paid solutions, but I'll fix the wording. Thanks! @Gideon So ๐ Fair enough! Though getting them to install a free app is still easier than explaining monthly SMS fees to the client!
-
Hi ProcessWire community! ๐ I'm excited to share a new module I've been working on: TeleWire - a Telegram notifications module that brings instant messaging capabilities to your ProcessWire sites. The Problem with Current Notification Solutions After running several e-commerce sites and experimenting with different notification systems, I've encountered these recurring issues: ๐ง Email (SMTP/WireMail): Requires SMTP server configuration (WireMailSMTP) Google App Passwords setup complexity Emails constantly landing in spam folders Delayed delivery (sometimes 5-10 minutes) No guarantee the recipient will see it quickly ๐ฑ SMS (Twilio, etc): Monthly fees just to keep a phone number active (~$1-15/month) Per-message charges (can add up quickly) US compliance requirements (verification, regulations) Not everyone wants to share their phone number ๐ฌ WhatsApp Business API: Requires business verification Complex setup process API fees and restrictions Limited to business accounts ๐ Push services (Pushover, etc): Requires purchasing apps ($5-10 per platform) Recipient needs to install and configure the app Additional barrier to entry Why Telegram? ๐ Completely free - No monthly fees, no per-message charges, no app purchases ๐ Widely available - Free to download on any platform, 900+ million users worldwide โก Instant delivery - Messages arrive in 1-2 seconds, not minutes ๐ฏ Low barrier to entry - Just "install the free app and start a chat with the bot" vs "pay $5" or "give me your phone number" ๐ Reliable - No spam filters, no deliverability issues, no carrier restrictions ๐ฑ Multi-platform - iOS, Android, Web, Desktop - works everywhere ๐จ Rich features - HTML formatting, emojis, photos, documents, links Key Features ๐ Send text notifications with HTML/Markdown formatting ๐ธ Send photos and documents ๐ฅ Support for multiple recipients (users and groups) ๐ง Simple admin interface with test button ๐ Optional logging and debug mode โก Optimized performance with configurable timeouts ๐ฏ Easy to integrate with hooks Real-World Use Cases E-commerce order notifications: $wire->addHookAfter('FormBuilderProcessor::processInputDone', function($event) { $form = $event->object; if($form->name === 'order-form') { $telewire = $this->modules->get('TeleWire'); $message = '๐ <b>New Order</b>' . "\n\n"; $message .= '๐ค Customer: ' . $form->get('customer_name')->value . "\n"; $message .= '๐ฐ Total: $' . $form->get('total')->value; $telewire->send($message); } }); Failed login attempts monitoring: $wire->addHookAfter('Session::loginFailed', function($event) { $telewire = $this->modules->get('TeleWire'); $name = $event->arguments(0); $message = 'โ ๏ธ <b>Failed Login Attempt</b>' . "\n\n"; $message .= 'Username: ' . $name . "\n"; $message .= 'IP: ' . $this->session->getIP(); $telewire->send($message); }); Content updates: $wire->addHookAfter('Pages::saved', function($event) { $page = $event->arguments(0); if($page->template == 'article' && !$page->isNew()) { $telewire = $this->modules->get('TeleWire'); $message = '๐ <b>Article Updated</b>' . "\n"; $message .= 'Title: ' . $page->title . "\n"; $message .= 'By: ' . $this->user->name; $telewire->send($message); } }); Send photos with captions: $telewire = $modules->get('TeleWire'); // Product photo when new product added $telewire->sendPhoto( $page->images->first()->httpUrl, "New product: {$page->title} - \${$page->price}" ); Send documents (invoices, reports): $telewire = $modules->get('TeleWire'); // Send generated PDF invoice $telewire->sendDocument( '/site/assets/invoices/invoice-123.pdf', 'Invoice #123 for Order #456' ); Installation Get a bot token from @BotFather on Telegram (takes 30 seconds) Install the module from GitHub Configure your bot token and chat IDs Click "Send Test Message" to verify everything works Requirements: PHP 8.2+ and ProcessWire 3.0.210+ Admin Interface Features The configuration page includes: โ Real-time connection status indicator ๐งช One-click test message button (AJAX, no page reload) โ๏ธ Configurable parse mode (HTML/Markdown/MarkdownV2) ๐ Optional logging with debug mode for troubleshooting โฑ๏ธ Adjustable API timeouts ๐ Silent mode option (no notification sound) ๐ Message length handling (auto-split long messages) Production Ready This module is currently running on several production sites: ๐ซ E-commerce shop - order notifications, stock alerts ๐ท Wine/liquor business - order confirmations, delivery updates ๐ฐ News portal - content publishing notifications Average response time: ~150-300ms per notification Getting Your Chat ID Find @userinfobot in Telegram Send any message - it will reply with your Chat ID Important: Start conversation with your bot by sending /start Enter the Chat ID in module configuration For groups: Add the bot to your group, make it admin, and use the negative Chat ID API Documentation // Get module instance $telewire = $modules->get('TeleWire'); // Simple text message $telewire->send('Hello from ProcessWire!'); // HTML formatted message $message = '<b>Bold</b> <i>italic</i> <code>code</code>'; $telewire->send($message); // Send with custom options $telewire->send('Silent notification', [ 'disable_notification' => true, 'parse_mode' => 'Markdown' ]); // Send photo $telewire->sendPhoto('/path/to/photo.jpg', 'Optional caption'); // Send document $telewire->sendDocument('/path/to/file.pdf', 'Document caption'); Feedback Welcome! I'd love to hear your thoughts, use cases, and suggestions. If you've been frustrated with email deliverability or SMS costs for notifications, give this a try! GitHub: https://github.com/mxmsmnv/TeleWire Thanks to the ProcessWire community for the inspiration and all the great modules that helped me learn the PW module system!
-
i use infomaniak.ch for couple projects
-
Thank you @bernhard for sharing your modules and for your open source contribution to the ProcessWire community! When I was developing modules, I initially thought of each one as a potential source of income. But over time I realized that the real value lies in something greater than money โ the support from users, their questions, the connections made, and the ability to contribute to this amazing community. That's what makes it truly worthwhile. Your decision to open source your modules is inspiring and will benefit many developers. Wishing you all the best! ๐
-
I made a similar file a long time ago, which I upload to the server. Then I select the archive I need, and it download and unpacks it automatically. Important: you can prepare a ready-made archive with ready-made profiles (skeleton) to make it easier to get started. pw.php
-
Hi everyone! ๐ I'd like to share SquareImages - a simple module that creates perfect square images from any source format. Born from a real-world need: displaying vertical product images (like Coca-Cola bottles) uniformly in galleries and grids without distortion or awkward sizing. The Problem // Traditional methods don't work well for mixed aspect ratios: $image->width(300); // Too narrow for vertical images $image->height(300); // Too wide $image->size(300, 300); // Distorted The Solution // One simple method - smart cropping, perfect squares: $square = $image->square(300); Key Features ๐ฏ Smart Cropping - Automatically centers on longer dimension ๐ฆ Format Preservation - Maintains original format (JPG/PNG/GIF) ๐ WebP Support - Chain with ->webp() for compression โก Performance - Fast URL generation ๐พ Automatic Caching - Built on PW's image engine Quick Example <div class="product-grid"> <?php foreach ($page->products as $product): ?> <?php $thumb = $product->photo->square(300); ?> <img src="<?= $thumb->url ?>" alt="<?= $product->title ?>"> <?php endforeach; ?> </div> Perfect uniform squares, regardless of source dimensions! API Methods $image->square(400); // Main method $image->squareWidth(500); // Based on width $image->squareHeight(600); // Based on height $image->getSquareURL(300); // Direct URL (faster) // WebP conversion $image->square(500)->webp(); // 25-65% smaller files Installation GitHub: https://github.com/mxmsmnv/SquareImages cd site/modules/ git clone https://github.com/mxmsmnv/SquareImages.git Or download ZIP and extract to /site/modules/SquareImages/ Then refresh modules in admin and install. Use Cases E-commerce product galleries Team member avatars Blog thumbnails Social media previews Instagram-style grids
-
- 7
-
-
-
-
It will be difficult to do all this even if you use AI to create what you need. First of all, you need to understand how it all works in ProcessWire and have skills in working with ProFields, Repeater, Repeater Matrix, Selector, and other basic modules. There is nothing complicated about it, but the time you spend creating a solution from scratch is better spent finding a ready-made solution and removing what you don't need. To understand how these systems work, I suggest you start by studying https://processwire.com/modules/site-invoices/
-
-
-
Iโd like to bring attention to a long-standing organizational issue that affects projects with many template files. As projects grow, the /site/templates/ directory becomes cluttered with dozens (or even hundreds) of PHP files, making it difficult to maintain and navigate. The Problem Currently, ProcessWire doesnโt natively support organizing template files into subdirectories. For example, if you want to organize templates like this: /site/templates/ โโโ warehouse/ โ โโโ dashboard.php โ โโโ packing.php โ โโโ packages.php โโโ customer/ โ โโโ dashboard.php โ โโโ packages.php โโโ sso/ โโโ login.php โโโ callback.php You currently face several challenges: Alternate Template Filename field is unreliable - The admin interface often strips or resets the path when saving, especially if the file doesnโt exist at that exact moment No automatic discovery - You must manually configure each templateโs file path Hooks donโt work as expected - Attempts to hook TemplateFile::getFilename or Template::getFilename donโt fire reliably Current Workarounds The existing workarounds are less than ideal: 1. Bridge files as suggested by @LostKobrakai // site/templates/warehouse-dashboard.php <?php namespace ProcessWire; include(__DIR__ . '/warehouse/dashboard.php'); This creates file duplication and maintenance overhead. 2. Manual Alternate Template Filename for each template: - Requires clicking through every template - Path validation often fails - No bulk operations Previous Discussions This has been requested multiple times over the years: Does PW support organizing Template files in sub Dirs? (2016) Template file in other folder than /site/template (2017) How do I organize a lot of templates? (2017) Proposed Solution Iโve opened a GitHub feature request with detailed suggestions: https://github.com/processwire/processwire-requests/issues/575 The core ideas: 1. Path persistence - The Alternate Template Filename field should reliably save paths like folder/filename.php 2. Automatic discovery - If a template named warehouse-dashboard isnโt found, check for /warehouse/dashboard.php 3. Template grouping in admin - Visual organization in Setup โ Templates based on folder structure Why This Matters Large projects - Sites with 50+ templates become unmanageable Team development - Clear organization helps multiple developers Module development - Modules could bundle template files cleanly Modern standards - Most frameworks support organized file structures Use Cases This would benefit: Multi-role applications (admin, customer, warehouse staff interfaces) Projects with many page types Module developers who want to bundle templates Anyone with SSO/OAuth files, API endpoints, or admin tools What Can You Do? If youโve faced this issue or would like this feature: 1. ๐ React to the GitHub issue 2. Share your use cases below 3. Suggest implementation approaches @ryan - Would love to hear your thoughts on this! Is this something that could be considered for a future release? Thanks for reading, and I hope this resonates with others whoโve felt this pain!
- 1 reply
-
- 9
-
-
Hello! Which browser your use ? more details if possible
-
WireWall v1.3.2 โ Advanced Traffic Firewall Released: January 4, 2026 Stable release with major improvements in data persistence, IPv6 support, and configuration reliability. What's New in v1.3.2 Permanent data persistence GeoLite2 databases, Composer vendor folder, and composer files are now safely stored in /site/assets/WireWall/ โ No more data loss or reinstallation needed after module updates Automatic migration from older versions When upgrading from โค1.2.0, old files from /site/modules/WireWall/ are automatically moved to the new location Full IPv6 CIDR support Complete IPv6 range matching for both blocking and whitelisting Enhanced exception system New configuration fields: โข Custom Trusted AJAX Paths โข Custom API Paths (bypass for ALL HTTP methods โ GET/POST/PUT/DELETE/etc.) Robust checkbox handling All toggle options now reliably save as 0/1 (fixes old config issues after updates/reinstalls) Improved configuration interface New colorful "Setup Information" section with current paths, migration guide, and clear installation instructions Recommended post-update steps Go to Modules โ WireWall โ Configure Verify GeoIP databases are located at: /site/assets/WireWall/geoip/GeoLite2-*.mmdb If you have GeoLite2-City.mmdb โ enable City & Subdivision blocking Add any custom paths you need in: โข Custom Trusted AJAX Paths โข Custom API Paths Requirements ProcessWire โฅ 3.0.200 PHP โฅ 8.1 Strongly recommended: MaxMind GeoLite2 databases (Country + ASN required, City optional for detailed logging) Downloads WireWall.module.php Full module archive (zip) Full documentation โ README Website โ wirewall.org Thanks to everyone testing and providing feedback! Stay secure! ๐ก๏ธ
-
Happy 2026 everyone! ๐ TL;DR: I made 2048 game for ProcessWire admin. Install it, ignore your inbox, get high scores. Why? Because it's January 1st and: โ You're probably hungover โ Nobody expects you to work โ You're definitely checking your admin anyway โ Why not play some 2048 while you're there? What's inside? ๐ฎ Classic 2048 (arrow keys or swipe) ๐ Leaderboard (compete with your team!) ๐ Sound effects (mutable, we know your head hurts) ๐ฑ Works on phone (for bathroom breaks) โ๏ธ Configurable grid (3x3 to 12x12 if you hate yourself) Download https://github.com/mxmsmnv/Process2048 Install Upload to /site/modules/Process2048/ Modules โ Refresh โ Install Setup โ 2048 Start procrastinating! Screenshot: Cheers ๐ฅ
-
- 10
-
-
-
-
As we close out 2025, I'm pleased to share a new module that I've been using in production: FieldtypeTimezone / InputfieldTimezone. ๐ฏ What It Does A straightforward timezone fieldtype that handles the complexity of timezones automatically - no configuration needed, just install and use. Key Features: Dynamic UTC offsets - automatically calculates current offsets with DST support Simple format - displays as "Country โ City (UTC+X)" Intelligent caching - 24-hour cache for optimal performance Production-ready - strict validation at all levels Complete coverage - all major world timezones included ๐ก Why I Built This Working on global websites (wine shop, news portal), I needed a reliable way to handle user timezones without complexity. The module automatically adjusts UTC offsets for DST: America/New_York: UTC-5 in winter, UTC-4 in summer Europe/London: UTC+0 in winter, UTC+1 in summer ๐ Basic Usage <?php // Display date in a nice English format $timezone = $page->tz; // e.g., "America/New_York" if ($timezone) { $tz = new \DateTimeZone($timezone); $datetime = new \DateTime('now', $tz); echo $datetime->format('F j, Y \a\t g:i A T'); } ?> Perfect for: User profiles with timezone preferences Event calendars with automatic time conversion Global applications requiring accurate time display Any site serving users across multiple timezones ๐ Requirements ProcessWire 3.0.0+ PHP 8.1+ ๐ฆ Installation GitHub: https://github.com/mxmsmnv/FieldtypeTimezone cd /path/to/processwire/site/modules/ git clone https://github.com/mxmsmnv/FieldtypeTimezone.git Or download and extract to /site/modules/FieldtypeTimezone/ Then install via Modules โ Site โ FieldtypeTimezone ๐ Documentation Full documentation with practical examples, API methods, and advanced usage scenarios is available in the GitHub repository. ๐ค Feedback Welcome The module has been tested in production on several sites, but I'd appreciate any feedback, suggestions, or bug reports from the community. Happy New Year to the ProcessWire community! ๐
-
How to add spaces left and right for vertical images
maximus replied to maximus's topic in General Support
I'm back, happy to present a module that makes square images. https://github.com/mxmsmnv/SquareImages I welcome any feedback. -
WireNPS is a comprehensive module for collecting and analyzing customer feedback via a modern Net Promoter Score (NPS) popup interface. Key Features: Elegant NPS Widget: A non-intrusive, mobile-friendly popup for ratings (0-10) and text feedback. Real-time Analytics: Dashboard featuring NPS score calculation, score distribution charts, and 30-day trend graphs. Multilingual Support: Built-in support for English, German, French, and Chinese with automatic browser/user language detection. Flexible Access: Support for both logged-in users and guests (Public/Private modes). Data Export: CSV export functionality for external analysis. Privacy Control: Configurable IP/User Agent tracking and cookie management. Requirements: ProcessWire 3.0+ PHP 8.2+ Quick Installation: Download or git clone into /site/modules/WireNPS/. Install via the ProcessWire admin. Create an AJAX handler page using the provided template. GitHub: https://github.com/mxmsmnv/WireNPS
-
- 9
-
-
-
New version, added Stats & Page Structure Hierarchy. How to install: Create template (like lego.php) with name lego Create page /lego_1234/ with select template Open your path in browser lego.php Demo:
-
Hi everyone! Youโve probably seen embedded product cards directly in articles on sites like Allegro, PriceRunner? I was using Hanna Code but found its capabilities limiting for my needs, so I decided to fork it and create Embedr - a more feature-rich version: Key Features: ๐ฏ Dynamic content blocks via ProcessWire selectors (not just static code) ๐ Live preview directly in admin interface ๐จ Built-in visual card builder (UIKit-based) - no PHP required! ๐ Custom PHP templates for full control when needed ๐ท๏ธ Reusable embed types system ๐ Debug mode with comprehensive logging โ Guest-safe - works for all users out of the box Quick Example: Create an embed with a selector: Name: featured-products Selector: template=product, featured=1, limit=6 Type: products Insert in text: ((featured-products)) Done! The module automatically finds pages and renders product cards. Need custom design? Just create a PHP template at /site/templates/components/products.php GitHub: https://github.com/mxmsmnv/Embedr Give it a try and let me know what you think! ๐
- 3 replies
-
- 13
-
-