Jump to content

Search the Community

Showing results for 'hello'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Welcome to ProcessWire
    • News & Announcements
    • Showcase
    • Wishlist & Roadmap
  • Community Support
    • Getting Started
    • Tutorials
    • FAQs
    • General Support
    • API & Templates
    • Modules/Plugins
    • Themes and Profiles
    • Multi-Language Support
    • Security
    • Jobs
  • Off Topic
    • Pub
    • Dev Talk

Product Groups

  • Form Builder
  • ProFields
  • ProCache
  • ProMailer
  • Login Register Pro
  • ProDrafts
  • ListerPro
  • ProDevTools
  • Likes
  • Custom Development

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. Hello, Peter. Thanks for the updates — it's clear that you're moving fast and in the right direction. Lots of screenshots, lots of details, it already looks solid. Good luck with the improvements. Take your time, but also don't delay — the potential of the thing is good.
  2. Hello friends of PW! i want to check if a fieldset already exists. Using fields->get(fieldsetName) returns NULL. Using get for normal fields works well and return the field requested. PW-Version is 3.0.255 Is there a way to check fieldsets? Thank you for help
  3. Good afternoon. My brain is struggling with is and I think it's because I'm nervous about importing 700 user records! I'm been looking at all the importers and I'm just unsure which one would be recommended. I'm using FrontendLoginRegister Module. This works great! This creates a role called Registered. I've also created addition fields to match the imported data. I'm happy to do a slow low number batch like 50 records at a time. The password will be updated when the user effectively uses the forgotten password form with their email for the first-time. // Database names field_user_title field_first_name field_last_name field_elected_year field_member_status field_year_of_birth field_gender_at_birth field_address1 field_address2 field_address3 field_town field_county field_mobile_phone field_home_phone field_username ------------------------------ field_roles - Existing field_pass - Existing field_email - Existing Example data: Title, First Name, Last Name, Email, Home Phone, Mobile Phone, Address 1, Address 2, Postcode, Town, County, Country, Year of Birth, Gender at Birth, Elected Year, Member Status Mr, Mark,Pierce, hello@emal.co.uk, 7834999888, 7834999888,"Flat 5, the elm",111 long street,TQ7 1XX,Totnes, Devon, United Kingdom, 1955, Male, 2020, Visiting Any thoughts and advice on doing this other than a database backup, other good practice etc... 🙂 Many thanks in advance. Mark
  4. Hello, I tried to install PW on a subdomain. Installation was perfect, all requirements met, all lights green. After installation I got a blank page. No errors whatsoever. I tried to change the php version up and down, no change. I read somewhere here in this forum that htaccess might be to blame, but I did not change the one PW put on my server. I checked also the server log, asked support about it (client denied by server configuration). They say it's up to the User, server is ok. On frontend I got a Fatal Error: Uncaught Error: Class 'Pages' not found in wire/core/ProcessWire.php:575. Removed install.php and install folder. Nothing. Debug in config file is set to true, php version is 7.4 for PW 3.x. Database tables were created. One note, the domain is a third level domain, so abc.mydomain.com etc. Installed PW many times, this time I'm not getting meaningful data from the app. Thank you very much for any hint.
  5. 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!
  6. hello. are blind devs welcome here? just a question because we're currently working on something big that needs a codebase easy to work with.
  7. Hello everyone, I’m happy to share a new module I’ve been working on: WireMagnet. We often face the requirement to offer "gated content" (like Whitepapers, PDFs, or Zip files) where users need to provide their email address to receive a download link. While there are external services for this, I wanted a native, privacy-friendly, and lightweight ProcessWire solution. What does WireMagnet do? WireMagnet handles the entire flow of capturing leads and delivering files securely. It intercepts form submissions, logs the lead, and sends an email with a unique, temporary download token. It prevents direct access to the files (assets are not just sitting in a public folder). Key Features: Secure Delivery: Generates unique download tokens (valid for 24 hours) and serves files via wireSendFile(). Double Opt-In (DOI): Optional support for DOI to verify email addresses before sending the file. Automated Emails: Automatically sends the download link (or attaches the file directly if preferred). AJAX Ready: Comes with built-in Alpine.js support for seamless, reload-free form submissions. Lead Management: Logs all subscribers (Email, IP, Timestamp) to a custom database table (leads_archive). Admin Interface: View leads and export them to CSV directly from the ProcessWire backend. Easy Integration: Render the form with a single line of code. How to use: Install the module. Create a page (e.g., using a lead-magnet template) and upload your file to a file field. Output the form in your template: // Render the subscription form (default field: 'lead_file') // The module automatically handles success/error messages and styling. echo $modules->get('WireMagnet')->renderForm($page); // OR: Render for a specific field (e.g., if you have multiple magnets or custom field names) echo $modules->get('WireMagnet')->renderForm($page, 'my_custom_file_field'); // OR: Override the button text manually echo $modules->get('WireMagnet')->renderForm($page, 'lead_file', 'Send me the PDF!'); Configuration: You can configure the sender address, email subject, DOI settings, and styling preferences (like button text) in the module settings. Download & Source: GitHub: https://github.com/markusthomas/WireMagnet Modules Directory: https://processwire.com/modules/wire-magnet/ I'm looking forward to your feedback and suggestions! Cheers, Markus
  8. Hello! Which browser your use ? more details if possible
  9. Hello, i am trying to develop a simple Fieldtype module and followed Tutorial on developing a Fieldtype module. I installed the module (Fieldtype and Inputfield) created a field of that type, add such a field to a template and edited a page. After entering values and click save button the method processInput() is invoked but then nothing happens, sleepValue() and wakeupValue() are never invoked, the resulting editor page ends up showing empty entry fields. What i'm getting wrong? <?php namespace ProcessWire; class InputfieldTimeframe extends Inputfield { /** * getModuleInfo is a module required by all modules to tell ProcessWire about them. * Information about your module and some settings and definition of module dependcies * @return array */ public static function getModuleinfo() { return [ 'title' => __('Inputfield Timeframe', __FILE__), 'summary' => __('Inputfield for start date and end date', __FILE__), 'author' => 'T. Heinlein', 'version' => "0.1.2", 'icon' => 'calendar', 'permanent' => false, 'requires' => [ 'PHP>=8.0.0', 'ProcessWire>=3.0.244', 'FieldtypeTimeframe' ], ]; } public function __construct() { parent::__construct(); } public function ___render() { $value = $this->attr('value'); $field = $this->field; $html = "<div class='interval'>" . "<input type='date' name='datefrom'>" . "<input type='date' name='dateto'>" . "</div>"; return "<div style='border:solid 1px red;'>$html</div>"; } public function renderValue() { $value = $this->attr('value'); return "$value"; // TODO: locale format } public function ___processInput(WireInputData $input) :self { $value = $this->attr('value'); $input->datefrom = trim($input->datefrom); $input->dateto = trim($input->dateto); $value['datefrom'] = $input->datefrom; $value['dateto'] = $input->dateto; bd($value, "processInput"); return $this; } } <?php namespace ProcessWire; class FieldtypeTimeframe extends Fieldtype { /** * getModuleInfo is a module required by all modules to tell ProcessWire about them. * Information about your module and some settings and definition of module dependcies * @return array */ public static function getModuleinfo() { return [ 'title' => __('Timeframe', __FILE__), 'summary' => __('Fieldtype representing a timeframe with start and end date', __FILE__), 'author' => 'T. Heinlein', 'version' => "0.1.1", 'icon' => 'calendar', 'installs' => 'InputfieldTimeframe', 'requires' => [ 'PHP>=8.0.0', 'ProcessWire>=3.0.244' ] ]; } public function __construct() { parent::__construct(); } /** * define the table columns needed for that field type AND an additional column 'data' for a primary key. * (this is low level input for the database) * *** this method MUST be implemented when writing a custom fieldtype */ public function getDatabaseSchema(Field $field) : array { $schema = parent::getDatabaseSchema($field); $schema['data'] = 'varchar(64) NOT NULL'; /* data is required field for system purposes */ $schema['datefrom'] = 'date'; $schema['dateto'] = 'date'; return $schema; } public function ___sleepValue(Page $page, Field $field, $value) { bd($value, "sleepValue"); $df = $value['datefrom']; $dt = $value['dateto']; $res = ['datefrom'=> $df, 'dateto' => $dt]; return $res; } public function wakeupValue(Page $page, Field $field, $value) { bd($value, "wakeupValue"); return $value; } public function getBlankValue(Page $page, Field $field) { return array(); } public function getInputfield(Page $page, Field $field) { $inputfield = $this->wire('modules')->get('InputfieldTimeframe'); $inputfield->class = $this->className(); /* adds the class name as a css class to the wrapper element */ $pageValue = $page->get($field->name); $inputfield->setAttribute('value', $pageValue); return $inputfield; } /** * @param Page $page * @param Field $field * @param int|object|WireArray|string $value * @return int|null|object|OpeningHours|WireArray|string * will be called on before sleepValue and after wakeupValue */ public function sanitizeValue(Page $page, Field $field, $value) { if (! is_array($value) ) { $value = $this->getBlankValue($page, $field); } return $value; } }
  10. Hello, Would this solution suit your needs?: https://processwire.com/modules/admin-restrict-branch/
  11. Hello @maximus Thanks for sharing! I will certainly give it a shot. Side note: the guys at LEGO "can get furious" when someone else uses their trademark in a way they consider inappropriate. As long as it is for something personal, that should be legally fine. I am not a lawyer, but letting us download your file in a forum post like this should be considered to be "for personal purposes". If you were to turn it into a "product" then that would be a different matter.
  12. Hello all! There's a new version of Fluency and a critical update announcement for all DeepL users. Fluency 2.2.0 has just been released and is a critical update for all users of Fluency that employ DeepL as their translation service. As mentioned above, DeepL is deprecating their previous method of API authentication on January 15, 2025. This means that all Fluency versions less than 2.2.0 that are using DeepL will no longer translate content. Upgrading from Fluency 1.8.0 or earlier requires a complete uninstall/reinstall. The module will have to be configured again, so note your API key if you don't have access to it otherwise. This will not result in any content loss. Fluency 2.2.0 also brings additional features and bugfixes. These include compatibility with AdminThemUikit v3 and its theming customization abilities. Fluency also now uses CSS custom properties so it is possible to customize it separately. This release also includes a fix for an issue that may affect saving content in RockPageBuilder fields mentioned earlier in this thread. For full notes on changes and improvements see the Github release page. If you have any trouble with the module please report them here, filing an issue on Github is helpful as well. Thank you all for your feedback and ongoing support. Additional thanks to the developers who have donated via PayPal, always appreciated!
  13. Hello ! 👋 I'm excited to share WireWall, a comprehensive security firewall module I've been developing for ProcessWire. After months of real-world testing on production sites (including blocking 99.98% of malicious traffic on my e-commerce platform), I'm ready to release it to the community. What is WireWall? WireWall is a ProcessWire-native security module that provides enterprise-grade protection with granular geographic and network-level blocking. Unlike traditional firewalls that only block by country, WireWall lets you block by city, region (state/province), VPN/Proxy/Tor, ASN, and more. Key Features Geographic Blocking: City-level blocking - Block specific cities worldwide (e.g., "Philadelphia", "Beijing", "Tokyo") Region blocking - Block entire states/provinces (e.g., "Pennsylvania", "California", "Tokyo Prefecture") Country blocking - Traditional country-level controls with whitelist/blacklist modes Network Protection: VPN/Proxy/Tor detection - Multi-API detection system with intelligent fallback Datacentre detection - Block AWS, Google Cloud, DigitalOcean, and other hosting providers ASN blocking - Block entire autonomous systems by ASN number Rate limiting - Per-IP rate limits with automatic temporary bans AI bot blocking - Automatically block GPTBot, ClaudeBot, and other AI scrapers Performance & Scalability: File-based cache - Scales to 1M+ IPs with zero database overhead Lightning-fast lookups - 0.5-2ms with MaxMind databases HTTP fallback - Works without MaxMind databases (though less performant) Smart caching - GeoIP cached for 30 days, VPN checks for 7 days Developer-Friendly: Priority-based system - 14 security layers evaluated in order JavaScript challenge - Detect and block headless browsers Comprehensive logging - Debug mode with detailed request information Cache management UI - Built-in interface to view stats and clear cache Triple admin protection - Logged-in users, IP whitelist, admin area bypass Real-World Results On my e-commerce site (LQRS.com), WireWall has been running for several months with impressive results: 99.98% blocking rate - Nearly all malicious traffic blocked Zero false positives - Legitimate customers unaffected Significant reduction in AWS/cloud-based automated attacks Complete elimination of VPN/proxy fraud attempts Installation cd /site/modules/ git clone https://github.com/mxmsmnv/WireWall.git Then in ProcessWire admin: Modules → Refresh Install WireWall Configure your blocking rules You're protected! How It Works - Priority System WireWall processes every request through 14 prioritised security layers: Admin Area → ALLOW (ProcessWire admin always accessible) IP Whitelist → ALLOW (manual whitelist bypass) Rate Limiting → BLOCK (excessive requests) IP Blacklist → BLOCK (permanent blocks) JavaScript Challenge → CHALLENGE (suspicious requests) VPN/Proxy/Tor → BLOCK (anonymous services) Datacentre Detection → BLOCK (cloud hosting) ASN Blocking → BLOCK (autonomous systems) Global Rules → BLOCK (known patterns) Country Blocking → BLOCK (country rules) City Blocking → BLOCK (city rules) Region Blocking → BLOCK (region rules) Country-specific Rules → BLOCK (custom rules) Default → ALLOW ✓ First match wins - once a rule triggers, evaluation stops. MaxMind Integration WireWall works best with MaxMind GeoLite2 databases (free): GeoLite2-Country.mmdb - Country detection GeoLite2-City.mmdb - City and region detection GeoLite2-ASN.mmdb - Network/ISP detection Without MaxMind, it falls back to ip-api.com HTTP API (slower, with rate limits). City and region blocking require the MaxMind City database. Download MaxMind databases from: https://dev.maxmind.com/geoip/geolite2-free-geolocation-data Technical Details ProcessWire: 3.0.200 or higher PHP: 8.1 or higher Optional: MaxMind GeoLite2 databases (Country, ASN, City) Optional: Composer (for MaxMind GeoIP2 library) Why Another Firewall Module? I needed something specifically for ProcessWire that: Scales efficiently - File-based cache handles millions of IPs without database bloat Provides granular control - City and region blocking isn't available in other solutions Works offline - MaxMind databases work without external API calls Integrates natively - Built specifically for ProcessWire's architecture Stays free - Open source, no premium tiers or upsells Other solutions like Wordfence (WordPress), Sucuri (paid service), and ModSecurity (server-level) either don't integrate well with ProcessWire or lack the geographic granularity needed for fraud prevention. Resources GitHub Repository: https://github.com/mxmsmnv/WireWall Documentation: Full README with installation, configuration, and troubleshooting Landing Page: https://wirewall.org Licence: MIT (free for commercial use) Quick Start TL;DR # Install cd site/modules && git clone https://github.com/mxmsmnv/WireWall.git # Activate in ProcessWire admin Modules → Install → WireWall # Configure - Enable module - Set blocking rules (cities/regions/countries) - Enable VPN detection - Configure rate limiting - Save # Monitor Setup → Logs → wirewall.txt I'm happy to answer any questions! Has anyone else been working on security solutions for ProcessWire? I'd love to hear about your approaches and challenges. Best regards, Maxim
  14. Hello, the selector doesn't work in all languages $selector = "(FieldtypeText.extends%=$q), limit=10, template!=home"; Do I have to add something like "lang=all"? Regards Toni
  15. Hey hello, Is it possible to get this link to the parent to lead to the actual parent instead of going to the overview? The thing is the overview contains thousands of pages, and it shows the first 30 or so in the tree-view, so you loose track of wher you are. If there is a way to get this link to open up the actual edit page of the parent event instead that would be amazing tx, J
  16. In a Fieldtype module you can define config inputfields for a field that uses the Fieldtype in the ___getConfigInputfields($field) method. The saved values become properties of the Field object ($field). But how do you set a default value for a config inputfield in a way that doesn't prevent the user from clearing the default and leaving the inputfield empty? It's the first time I've had this need and I can't work out how to do it. I looked at the core Fieldtype modules but I couldn't find one that applies a default value that is allowed to be cleared. A simple module to explain it more clearly: <?php namespace ProcessWire; class FieldtypeTest extends FieldtypeText { public static function getModuleInfo() { return array( 'title' => 'Test Fieldtype', 'summary' => 'Test default config values.', 'version' => '0.1.0', ); } /** * Config inputfields * * @param Field $field * @return InputfieldWrapper */ public function ___getConfigInputfields(Field $field) { $inputfields = parent::___getConfigInputfields($field); /* * How can I set a default value for "greeting" in a way that * doesn't prevent the user from saving an empty value? * * The below doesn't work because it will apply the default value * when the user has attempted to clear it. * * */ if(is_null($field->get('greeting'))) $field->set('greeting', 'Hello'); $f = $this->wire()->modules->get('InputfieldText'); $f->label = 'Greeting'; $f->attr('name', 'greeting'); $f->attr('value', $field->get('greeting')); $inputfields->add($f); return $inputfields; } } Does anyone know the right way to do this? Maybe @ryan has a suggestion? Thanks in advance.
  17. JoZ3

    PromptAI

    Hello, very good module. Is there any possibility of integrating Deepseek or adding a custom API query URL? I currently use your module with Deepseek. All I did was change the OpenAI URL to the Deepseek URL, and it works very well, but it would be ideal if it were integrated. Another thing: is there any option for it to work with SEO Maestro?
  18. Hello @ all The new version 2.3.0 comes with a brand new feature: the possibility to turn a form into a multi-step form. Many thanks to @Jan S. for the idea and the support in testing during the development of the new feature. In a nutshell: A multi-step form is a long form divided into multiple steps. At the end of each step, the user clicks on a "Next" button to go to the next section. In the final step a summary of the data entered will be displayed to the user. The user now has the option to change some of the data if necessary before finally submitting the form. Typical use cases are very long forms, surveys or quizzes. I have written an extra chapter in the docs with a lot more information, which you can find here. There are only 2 restrictions for multi-step forms to work properly: The send button must be after the last step (by the way, it wouldn't make sense to put it anywhere in between ;-)) File upload fields must be placed in the last step (otherwise they won't work) To turn a form into a multi-step form, you only need one new method: addStep() You need to add this method to the form object in the places where you want to make the cut: $form = new \FrontendForms\Form('simpleform'); $firstname = new \FrontendForms\InputText('firstname'); $firstname->setLabel('Firstname'); $firstname->setRule('required'); $form->add($firstname); $lastname = new \FrontendForms\InputText('lastname'); $lastname->setLabel('Lastname'); $lastname->setRule('required'); $form->add($lastname); $form->addStep(); // first step $email = new \FrontendForms\InputEmail('email'); $email->setLabel('Input Email'); $email->setRule('required'); $form->add($email); $form->addStep(); // second step $birthday = new \FrontendForms\InputDate('date'); $birthday ->setLabel('Birthday'); $form->add($birthday ); $form->addStep(); // third step $message = new \FrontendForms\Textarea('message'); $message->setLabel('My message'); $form->add($message); $form->addStep(); // fourth step $button = new \FrontendForms\Button('submit'); $button->setAttribute('value', 'Send'); $form->add($button); if($form->isValid()){ print_r($form->getValues()); // do what you want } // render the form echo $form->render(); That is all! You can find more examples here. To be informed of all the changes in this release, please read the changelog. As always, please keep an eye on whether everything is working as expected and report any issues you discover here or directly on GitHub. Jürgen
  19. Hello again! The new AppApi release v1.4.0 is live now! Changes in 1.4.0 (2025-11-01) Add compatibility for ProcessWire instances installed in a subdirectory (Thank you @saerus for mentioning this issue) Add helper functions that can manipulate subdirectory links. -> Can be very handy for using ProcessWire as a headless CMS for your JavaScript applications (See FAQ for more information) Add config param to disable automatic adding access control headers (Thank you @gerritvanaaken for the ticket) Fix an issue where adding trailing slashes automatically lead to problems with route parameters (Thank you @gingebaker for the ticket) Thank you all for using AppApi, leaving feedback and for posting Github Issues and PRs. Thanks to you, the module keeps getting better and better.
  20. Hello, I have a site which have comparisons of products. There's an ajax select form from this tutorial. I have ~8000 pages The problem is high cpu load when multiple users are searching (server two 5GHz cores, 1 GB ram). I get db connection errors or very slow response time Is there a way to optimize searching? I want to minimize db queries and make ajax responses as fast as possible
  21. Hello @perplexed Are you sure that you have added this method to the WireMail object and not to the form object? I have tested it without problems. Please take a look here at the example of a simple contact form and let me know if this solves your problem. Jürgen
  22. @adrian, it might be something that only happens with particularly complex modules, because I think I've added the namespace to a bunch of my earlier modules and never struck that problem. And if I test with a dummy module... <?php class TestModule extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'Test Module', 'summary' => 'Test applying namespace', 'version' => '0.1.0', 'autoload' => true, ); } public function ready() { $this->addHookAfter('AdminTheme::getExtraMarkup', $this, 'doSomething'); } protected function doSomething(HookEvent $event) { $parts = $event->return; $parts['masthead'] .= "hello"; $event->return = $parts; } } ...then I can add the namespace without issue. If I remove the namespace from a namespaced module then I get a server error, but that's not something anyone would need to do. Just a guess, but you could try removing the previously compiled module files from /site/assets/cache/FileCompiler/site/ in the upgrade() method to see if that makes a difference.
  23. Hello community! We would like to share our new module for ProcessWire: ----------------------------------------------------------------------------------------------------------------------------- Asyntai - AI Chatbot Create and launch AI assistant/chatbot for your ProcessWire website in minutes. It talks to your visitors, helps, explains, never misses a chat and can increase conversion rates! All while knowing your website, customized just for you. Your ProcessWire website can now talk. This plugin embeds the Asyntai chatbot on your ProcessWire site and provides a simple admin page to connect your site to Asyntai. Why choose Asyntai? • Increase conversions: Instant, human like replies keep shoppers engaged and buying. • Never miss a chat: The AI replies day and night, even when your team is offline. • Knows your website: Customized just for you; it follows your instructions. • Works in all languages: Automatically detects and answers in the visitor’s language. • Fast responses (1–3s): Keeps customers from bouncing. Installation Download the module from GitHub or from here Copy the module files to /site/modules/Asyntai/ Go to Modules in your ProcessWire admin Click "Refresh" to detect the new module Click "Install" next to "Asyntai - AI Chatbot" Configuration After installation: Go to Modules → Asyntai Click "Get started" to connect your Asyntai account Sign in or create a free account The module will automatically save your connection The chatbot is now live on your site! Don't have an account yet? Create a free Asyntai account at asyntai.com/auth Managing Your Chatbot Once connected, you can manage your chatbot settings, review chat logs, and customize AI responses at: asyntai.com/dashboard Requirements ProcessWire 3.0.0 or higher PHP 7.2 or higher Have a question? Email us at hello@asyntai.com or try our chatbot directly at asyntai.com/ GitHub: https://github.com/asyntai/processwire-Asyntai
      • 2
      • Like
  24. Hello @da² I have tried to test the file size restriction with various files, but in my case I could not find any issues. It has worked every time. Do you see the red badge warning under the file input field too as in my screen shot below before you submit the form (if you have selected a file larger than allowed)? If you see this red badge, the form could not be valid after the form submission. Please also check the file size in the badge (in this case it is 12.81 MB). Maybe you could provide a screen shot before the form submission? Please check if you have the latest version too! Best regards
  25. Hello @da² Thanks for reporting these issues, I will check this next week. For now I have tried the max file size validator and it has worked in my case, but I guess I must dig a little deeper. Maybe there is a problem especially with zip files and file size calculation.
×
×
  • Create New...