Recently Updated Topics
Showing topics posted in for the last 7 days.
- Yesterday
-
Hi everyone, This module completely replaces the default ProcessWire image sizing engine with the powerful Intervention Image v3 library. The goal was to modernize how we handle images in ProcessWire, bringing in features like AVIF support, superior resizing quality, and strict aspect-ratio handling, while keeping the API compatible with what you already know. ๐ What does it do? Replacement: It hooks into Pageimage. You can keep using $image->width(300), $image->size(800, 600), or $image->crop(...) just like you always have. Modern Formats: Automatically handles WebP and AVIF generation. Smart Responsive Images: It introduces a configuration-based approach where you define Breakpoints, Grid Columns, and Resizing Factors. The module uses these settings to automatically calculate and generate the perfect srcset for your layouts. โจ New Methods: render() and attrs() While standard methods work as expected, Iโve added/updated methods to handle modern HTML output: 1. $image->render(string $preset, array $options) This outputs the complete HTML tag. It automatically handles: The <img> tag with srcset and sizes. The <picture> tag with <source> elements if you have enabled extra formats (like AVIF/WebP) in the settings. Lazy Loading & LQIP: It automatically generates a Low Quality Image Placeholder (pixelated/blur effect) and applies a base64 background to the image tag for a smooth loading experience. // Example: Render a 'landscape' preset defined in module settings echo $page->image->render('landscape', ['class' => 'my-image']); 2. $image->attrs(string $preset, array $options) Perfect for developers who use template engines like Twig or Latte, or prefer full control over their HTML. This returns an array of attributes instead of an HTML string. $data = $page->image->attrs('landscape'); // Returns array like: // [ // 'src' => '...', // 'width' => 1200, // 'height' => 675, // 'srcset' => '...', // 'sources' => [ ... ], // Array for picture tag sources // 'style' => 'background-image: url(data:image...);', // LQIP Base64 // 'class' => 'iv-lazy ...' // ] โ๏ธ Configuration Strategy Instead of hardcoding sizes in your templates, you configure your design tokens in the module settings: Breakpoints (e.g., 1200px) Aspect Ratios (e.g., 16:9) Grid Columns (e.g., 1-1, 1-2, 1-3) Factors (e.g., 0.5, 1, 1.5, 2 for Retina support) The module calculates the necessary image dimensions based on these combinations. If you request a specific aspect ratio, it ensures strict adherence to it, preventing 1px rounding errors. ๐ A Note on Documentation I wanted to get this into your hands as soon as possible, but due to a heavy workload, I haven't finished writing the detailed README.md yet. Currently, you can grab the code from GitHub (link below). I will submit this to the official ProcessWire Modules Directory after add some other features and after update readme.md Download / GitHub: GitHub Repo Iโd love to hear your feedback and suggestions!
-
@olafgleba @maximus I just pushed an update to kickstart.php. It is now possible to install any arbitrary Site Profile! You can either provide a URL to a ZIP file or upload a local ZIP file directly within the tool. The script extracts the profile to the correct location, allowing the standard ProcessWire installer to pick it up seamlessly. Give it a try and let me know if it works for your custom skeletons.
-
More or less the same as in 2016. The two best hosting providers for classic PHP websites remain: Metanet (even though they have declined since the takeover a few years ago) and Hostpoint.
-
Hey @ryan, hey all readres, I'd like to propose two features that would help those of us working with business and organizational clients. OAuth 2.0 Login Support Several of our clients use Microsoft 365, and it would be nice to integrate their websites seamlessly with e.g. Microsoft Entra ID. Native OAuth 2.0 support would allow users to log in with their organizational accounts instead of managing separate credentials. For an urgent case I'll try to set up @flydev's module (https://processwire.com/modules/oauth2-login/) but unfortunately the creation of users is not yet (?) possible. Microsoft Graph API for Email Delivery As said before, more and more peopele rely on Microsoft 365, and traditional SMTP with basic authentication is being phased out. Supporting Microsoft Graph API would allow us to: Use OAuth 2.0 tokens instead of storing SMTP passwords Leverage existing Microsoft 365 infrastructure Ensure better deliverability and avoid authentication headaches Native support for both would make ProcessWire from my perspectibe a more compelling choice for organizations looking for enterprise-grade SSO and email solutions.
-
- 4
-
-
Hi all, i've just ran into a funny issue, playing with pagination, htmx and that kind of thing in many different situations, i've a page containing a repeater called "zirepeater" it will be easier to explain with those few lines // $zirep = $pages->find("template=repeater_zirepeater, start=$start, limit=$limit"); // $zirep = $pages->find('template=repeater_zirepeater'); // $zirep = $pages->find('parent=1066'); $zirep = $page->zirepeater->find("start=$start, limit=$limit"); // and below in the template print_r($zirep); with the first three lines, firefox print_r a nice result in which i can read [template] => repeater_zirepeater so i assume my query is not that dumb ๐ but in chrome, brave or edge i get --- ProcessWire\PageArray Object ( [count] => 0 [items] => Array ( ) [selectors] => template=repeater_zirepeater ) ProcessWire\PageArray Object ( [count] => 0 [total] => 0 [start] => 0 [limit] => 2 [pager] => 0 ร 0 de 0 [items] => Array ( ) [selectors] => template=repeater_zirepeater, start=0, limit=2 ) ProcessWire\PageArray Object ( [count] => 0 [items] => Array ( ) [selectors] => parent=1066 ) --- depending on the query, funny isn't it, firefox is more pw friendly and understands pw way of dealing with repeater page when chromium don't even if they get the selectors well more a surprise than an issue as the uncommented line works with all of them but just in case it could be useful for someone playing with the same kind of things and yes i like playing with pagination and/or htmx load more with nearly everything, galleries, repeaters, children pages, external db table query results (very useful with hundreds of lines...), well, all what pw lets me play with, that's to say everything ๐ have a nice day
- Last week
-
This code creates a grayscale image as png: $project->img->pim2Load('gray2_')->grayscale()->pimSave(); This code saves an jpg in the assets directory but the file is not displayed in the image field of the page: $project->img->pim2Load('myjpg', array('outputFormat'=>'jpg'))->pimSave(); or: $project->img->pim2Load('myjpg')->setOutputFormat('jpg')->pimSave()->url; ( ProcessWire 3.0.255, PHP 7.3.33)
-
Is there now a solution in Processwire that does not require additional modules? Unfortunately, this code does not work, although one might assume that it would: <?=$project->myimg->size(580,580,[ 'quality' => 90, 'format' => 'jpg','cropping' => 'north' ])->url?>
-
Feeling it! ๐คฃ
-
Sorry for digging this out, but I have the exact same problem. How to actually solve the issue, please?
-
Hi This is very useful I am trying to emulate the following html (which works on my trial site) to give a set of sliding images: <div class="post-slider"> <img loading="lazy" src="images/post/post-6.jpg" class="img-fluid" alt="post-thumb"> <img loading="lazy" src="images/post/post-1.jpg" class="img-fluid" alt="post-thumb"> <img loading="lazy" src="images/post/post-3.jpg" class="img-fluid" alt="post-thumb"> </div> I have tried the following but it results in all images appearing one below another not as sliding images <div class="post-slider"> <?php foreach($page->slider_image as $slider) { $thumb = $slider; echo "<a href='$thumb->url'>"; echo "<img loading='lazy' src='$thumb->url' class='img-fluid' alt='post-thumb' />"; echo "</a>"; } ?> Could you tell me what I'm doing wrong? Many thanks
-
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
-
-
-
E-Commerce Solution
Saugatdai replied to Saugatdai's topic in ProcessWire Commerce (Padloper) Support
@Pixrael And @maximusthank you so much for such valuable guidance and suggestions. Now, I am understanding a little how to provide solutions to the client based on my experience and knowledge. I am relatively new to web development, and I have a dream of starting a digital agency that provides services to grow and scale small businesses with the help of digital technology. With your guidance, I will dive more deeply into the topics to strengthen my skills. I assume that every developer and business has a good workflow or ways of delivering services to the client to tailor to their needs. I would appreciate it a lot if anyone could suggest or guide how they are delivering such services to the client using ProcessWire and other services, as suggested by Pixrael and Maximus. One day, I will also contribute to the ProcessWire community as my experience grows, guiding new people to unleash the superpower of this CMS framework. Thank You All ! -
You can probably find hundreds more examples, e.g.: https://www.facebook.com/groups/771395196543555/posts/2371859523163773/ or:
- 1 reply
-
- 1
-
-
hi all, as usual, i have added a repo with the translation in french for the last master release, just in case https://github.com/virtualgadjo/pw-30255-lang-fr have a nice day Edited to say, i've just ran into a good old spelling mistake in a field and have updated the archive
-
I can't say much about it at the moment, as the module I'm currently developing is tailored specifically to a customer's needs. However, I plan to release a slightly different version later on, which will work in a similar way to the WordPress Media Manager.
-
module Fluency - The complete translation enhancement suite for ProcessWire
lpa replied to FireWire's topic in Modules/Plugins
Thanks. I just checked and found out that the version was already 2.3.0. So the problem is in that version, still.- 309 replies
-
- translation
- language
-
(and 1 more)
Tagged with:
-
Any news?
-
Hey there, I changed the generation of the IDs to the internal sanitizer pagename function because I had some HTML markup (spans) within the headlines in the text field, which meant that the markup was no longer valid in the frontend. line 56 // Remove html tags before creating slug $cleanText = strip_tags($m[2]); // Use ProcessWire's sanitizer for proper slug generation $slug = wire('sanitizer')->pageName($cleanText, true);
-
@ngrmm I think I found the bug (again), could you try and change TranslateGlossary.php:34 to the following: $entryArr = self::convertGlossaryStringToArray($language->translate_glossary ?? ''); The change is the ?? '' after translate_glossary. This handles empty glossary fields that return null instead of an empty string. Hopefully this will do it!
-
@maximus I included that .htaccess file as an extra measure but Apache won't serve .env files. Just don't tinker with some deeply hidden config somewhere to serve dotfiles ๐
-
Hi @patricus, like Markus has said, everyone is welcome. It's a very friendly and respectful place, full of talented people. And, speaking from experience, if you need a codebase that's easy to work with for big projects, ProcessWire is an excellent choice. You can build basically anything with it. And a lot of times things are done much faster than with the more popular frameworks.
-
End of 2025 the relaunch of the Kubota Brabender Technology Website went live. KBT is a global leader in feeding technology and bulk solids handling. The technical production is developed by me, Olaf Gleba. The grafic design is supplied by C&G: Strategische Kommunikation GmbH. Homepage: https://www.kubota-bt.com The site uses a lot of asynchronous calls in several sections. 1. The product search is ajax driven and also preserve entered filter options while browsing the product pages (and all other pages) with session.storage. 2. Because there are many global partners and locations, it is neccessary to allow to narrow down the selection for proper contacts. 3. The page media holds all available downloads and media content. This includes magazines, videos, terms of contract and works standard specifications. The videos are implemented with help of the HTML Dialog Element. Work Standards documents are supplied/collected from one source (product page) to avoid duplication. 4. Backend: As most of the time, i provided content modules that fits the client needs. This and that: PrivacyWire (@joshua) as CCM (just a few cookies to handle Matomo and external movie content) Uses the SearchEngine Module (@teppo) to handle (multilanguage) site search Wire Mail Smtp (@horst)to deliver automated e-mails Heavy use of Fieldtype AssistedURL (Fork by @adrian) to provide language dependend, local file linking (fieldname_[de|en] approach) Distribution of concatenate/minified css and javascript is cachebusted (happens within my developement environment,- no modules (like AIOM etc.) involved). The site uses a bunch of modules provided by the ProFields Package (for example Repeater Matrix and Table Fieldtypes).
-
- 11
-
-