Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 09/06/2018 in all areas

  1. I should have been clearer ?. Padloper name is not changing. The module name will remain as Padloper. The domain where Padloper will be hosted will change ?. Padloper will eventually be hosted at processwireshop.pw to join other modules in that location. Traffic to padloper.pw will eventually redirect to processwireshop.pw. Eventually, the domain padloper.pw may be parked or retired; there are no immediate plans for the domain. For now, it remains active, albeit with the said changes in traffic/hosting.
    4 points
  2. Just got a couple of likes from @Knubbi on my posts above which prompted me to note that there is a Search and Replace action for my Admin Actions module: http://modules.processwire.com/modules/process-admin-actions/
    4 points
  3. Hi all, I have posted this in the VIP support forum of Padloper as well. Some of you do not have access to that board so posting here as well. Hopefully it doesn't count as spamming?! In June 2018, Antti announced that he was looking for a new product owner for Padloper. Sometime after, I had a fruitful discussion with him about my vision for the project if I was to take over. We agreed that commitment, motivation and a concrete plan were all important ingredients for the continued success of Padloper. I would like to officially announce that I am now the product owner and lead developer of Padloper. For those who may not know, I am the author and maintainer of several ProcessWire modules, both free and commercial. I am also a moderator in the ProcessWire forums. I would like to share with you a number of things regarding what’s going to happen next. This will be a long read. First, I would like to thank Antti for developing a great product. A lot of man-hours, dedication, passion and love has gone into making Padloper what it is today. Secondly, I would like to thank all users of Padloper. A great product is nothing without active users utilising it, putting it to the test, reporting bugs (even offering possible solutions) and proposing new features. So, thank you for helping make Padloper great! Support Thousands of hours have gone into developing Padloper. Although the code is well-written and easy to follow, Padloper is a big application with many moving parts. As such, it will take some time before I can fully grasp its inner workings. To make this transition as smooth as possible, Antti will help me with support for Padloper for some time. Currently, Padloper has a dedicated support forum. This is an arrangement between Ryan and Antti. The support forum works great as it allows the opening of multiple support threads to cover different issues. I have yet to speak to Ryan whether this arrangement can continue. However, given that I have other pro modules that I support in the open forums, it is unlikely that I will be requesting Ryan to let Padloper’s dedicated forum carry forth. A dedicated forum for one of my pro modules and open forums for my other pro modules will lead to confusion and questions from users of those other modules. Hence, Padloper support in the forums will move to the open forums. The disadvantage here is obviously the fact that support will be offered in one single (and maybe massive) support thread. To get around a ‘single thread support forum’, I am thinking of developing a simple online support queue system for all my modules. Meanwhile, support will continue in a new single thread and via email. Roadmap This list is neither exhaustive nor cast in stone. Its aim is to give an overview of my plans for Padloper. · Padloper 2 – a new major release · New backend for Padloper · Optional pro frontend module for Padloper · Documentation · New payment modules Let’s talk a bit about this list. Padloper 2 Release Padloper 2 will be a major release that incorporates a new, central backend shop for Padloper. This will be a new process module that pulls from the existing parts of Padloper (data models, etc) into one interface (more on this below). This version will also be extensible in the frontend, allowing for the plugging in of a new, optional, commercial frontend shop (full featured shop profile). Padloper 2 will not support the current ‘any page can be a product’ paradigm. Technically, products will still be pages. However, all products will utilise the same Padloper template. These will be invisible to the shop users themselves (e.g., hidden in admin tree). Only superusers will have full control of the Padloper system stuff. Support The current Padloper will continue to be supported until the new Padloper 2 is released. New features will be included in Padloper 2 only. Once Padloper 2 is released, legacy Padloper will only receive security fixes. All other support will cease. Upgrade There will be no upgrade path from the current Padloper to Padloper 2. Although their underlying architecture is the same, making sure that everything works in different setups and environments will be time consuming. However, for those who really need to migrate, if time allows and for an agreed fee, I could develop a custom script for the migration. Backend A new backend interface will be the major visual difference between the existing Padloper and Padloper 2. It goes beyond visual differences though. The new backend will be the single gateway for managing all shop-related features, both current and new ones. The backend will unify and include: · Easily add shop products. · Ability to add as little or as many custom fields to products as required (title, SKU, price, discount field, image/photo, description, categories, tags, etc). · Discounts manager (including auto start/expire discount codes). · Customers manager. · Invoices manager. · Taxes management. · Payment gateways manager. · Improved digital products management. · Stock management. · Manual order creation. · Graphical sales report. · Customer support. · Access-controlled shop editors/staff. · Dashboard for shop metrics. · Shop settings. · Product variations. · Import/export products as CSV or JSON. · Products search/filter. · Etc. Users will be able to turn off backend features that they do not need. This will enable a more streamlined experience for users. I plan to release Padloper 2 within 4 - 6 months, hopefully sooner. This is a major undertaking, hence the timescale. Please note that the first release of Padloper 2 will not include all of the above planned features. The idea is to build incrementally, adding new features in minor updates, focusing on stability, usability and security. Frontend Past requests have included the development of a full featured frontend shop. This is planned for Padloper 2. However, this will be an optional pro module priced separately from Padloper itself. The ability to build own frontend shops using Padloper API will still continue. For those who want a plug-n-play solution, this frontend shop will come in handy. The frontend shop profile will feature an ajax-powered shopping cart and a customisable ready-to-go theme. Pricing Model There are no plans to change the current prices of the 3 Padloper licences (Single, Developer and Agency). However, in order to continue to provide Padloper as a stable product with great features, it is also important that it remains a competitive and financially sustainable project. In order for this to happen and to also bring Padloper in line with my existing pro modules, the pricing model itself has to change. Starting from Padloper 2, the pricing model will shift to an ‘annual subscription’ model rather than the current ‘lifetime licence model’. I am fully aware that there are different opinions for and against annual subscriptions. However, I believe that this model is the most equitable approach that suits both the developer and the clients. The annual subscription will allow users (licence holders) to get 12 months of free VIP support for Padloper as well as future updates available within that time period. After the 12 months, users will be able to renew (online) their subscription at a discounted cost (worked as a fraction of the full purchase price) for a further 12 months (perpetually). Users will be able to continue to use Padloper for life even if they don’t renew their subscriptions. Upgrading current licences to Padloper 2 will be a paid upgrade. Current users of Padloper will get an attractive discount. This will be a time-limited offer (maybe a couple of months) that will start with the release of Padloper 2. New customers will pay the full price for Padloper 2. I hope the planned features are reason enough for you to consider upgrading to Padloper 2. Payment Modules I will be taking over as the maintainer and lead developer of the existing payment gateways (Payment base class, PayPal and Stripe). New payment modules are also planned. Payment modules will continue to be free. However, only ProcessWire 3+ support will be provided going forward. Padloper Domain and Future Downloads I have also taken charge of the Padloper domain. Within the next 12 months, purchase and download of Padloper will shift to processwireshop.pw. Please note that this is not the official shop for ProcessWire! It just bears a name that reflects its product offerings ?. Eventually, traffic to padloper.pw will redirect to processwireshop.pw. Feedback I would love to hear your thoughts about the upcoming changes and any feature requests you might have for Padloper 2. Whilst I cannot guarantee that any request will be implemented, I can promise that I will thoughtfully consider all feedback. Thanks for reading and thank you for supporting Padloper! kongondo
    3 points
  4. upload_max_filesize & post_max_size have nothing to do with memory_limit! try: php_value memory_limit 256M // or 512M Also, post_max_size has to be 20 or 30 percent greater then upload_max_filesize!
    3 points
  5. My final code for {mailto} tag replacement: $tags = findSmartyMailtoTags($markup); // Ryan's regex function as shown above foreach($tags as $tag) { $href= 'mailto:' . $tag['attrs']['address']; if($tag['attrs']['subject']) $href .= '?subject=' . rawurlencode($tag['attrs']['subject']); $link_text = $tag['attrs']['text'] ?: $tag['attrs']['address']; $replacement = "<a href='$href'>$link_text</a>"; $markup = str_replace($tag['tag'], $replacement, $markup); }
    3 points
  6. Awesome thanks so much - this is really speeding my workflow up today.
    3 points
  7. v0.1.6 released - introduces a feature for adding a new sibling page, as requested above by Adrian.
    3 points
  8. or if even needed more early, but thats not very common, add it into your site/config.php. ?
    2 points
  9. Alternatively, depending on what your class does and when you need it to be called as well as the 'template approach' you're using, you could put the whole class in /site/templates/_func.php (_func.php) or in a custom file, e.g. /site/templates/_my_class_file.php. Then, in _init.php include the file (/site/templates/_init.php). Or, if you need it earlier (after current page has been determined but before it is rendered), include it in /site/ready.php or if needed even earlier (e.g to attach hooks), in /site/init.php. Follow the links for more info (to site-default). Using this approach, your ready.php and init.php remain a bit cleaner ?.
    2 points
  10. Thanks @Hamilton Wallace. What a pleasant surprise to see you here. Our association is a long one and here's to more of it. Thanks @Ivan Gretsky. Your point is noted and the Case Study for PP will get in there for sure.
    2 points
  11. If I understand the question correctly, you might be looking for a regex capture collection, but I think support for that is really rare and am pretty sure PHP/PCRE does not have such a thing. So I think you'd have to use a couple of regular expressions here: one to find all the {mailto...} tags, and another to isolate their attributes into independent arrays. That's because presumably the attributes can appear in any order and some may or may not be present. Here's how you might do it: function findSmartyMailtoTags($markup) { $tags = []; if(!preg_match_all('/\{mailto(\s+.*?\baddress=".*?")\}/', $markup, $a)) return array(); foreach($a[0] as $key => $tag) { $attrs = [ 'address' => '', 'text' => '', 'subject' => '' ]; if(!preg_match_all('/\s+(?<name>\w+)="(?<value>[^"]*)"/', $a[1][$key], $b, PREG_SET_ORDER)) continue; foreach($b as $attr) { $attrs[$attr['name']] = $attr['value']; } $tags[] = [ 'tag' => $tag, 'attrs' => $attrs ]; } return $tags; } If you wanted to do it without a regular expression, you could do this: function findSmartyMailtoTags($markup) { $tags = []; foreach(explode('{mailto ', $markup) as $cnt => $line) { if(!$cnt || false === ($pos = strpos($line, '"}'))) continue; $mailto = $line = substr($line, 0, $pos+1); $attrs = [ 'address' => '', 'text' => '', 'subject' => '' ]; while(strlen(trim($line))) { list($name, $line) = explode('="', $line, 2); list($value, $line) = explode('"', $line, 2); $attrs[trim($name)] = trim($value); } if(!empty($attrs['address'])) { $tags[] = [ 'tag' => "{mailto $mailto}", 'attrs' => $attrs ]; } } return $tags; } In either case, either version would return exactly the same thing (print_r result): Array ( [0] => Array ( [tag] => {mailto address="someone@domain.com" encode="javascript" text="link text" subject="The subject line"} [attrs] => Array ( [address] => someone@domain.com [text] => link text [subject] => The subject line [encode] => javascript ) ), [1] => Array ( [tag] => {mailto address="hey@hello.com" text="Hi" subject="Welcome friend"} [attrs] => Array ( [address] => hey@hello.com [text] => Hi [subject] => Welcome friend ) ) )
    2 points
  12. The problem with such a system is that it'll always be skewed towards "does not work" simply because when a module does work people are very likely to move on without any feedback while the ones where there's a problem with the module are likely to complain somewhere.
    2 points
  13. Breadcrumb Dropdowns Adds dropdown menus of page edit links to the breadcrumbs in Page Edit. The module also adds dropdowns in Edit Template, Edit Field, Edit User, Edit Role, Edit Permission, Edit Language, and when viewing a log file at Setup > Logs. Configuration options Features/details The module adds an additional breadcrumb item at the end for the currently edited page. That's because I think it's more intuitive for the dropdown under each breadcrumb item to show the item's sibling pages rather than the item's child pages. In the dropdown menus the current page and the current page's parents are highlighted in a crimson colour to make it easier to quickly locate them in case you want to edit the next or previous sibling page. Unpublished and hidden pages are indicated in the dropdowns with similar styling to that used in Page List. If the option to include uneditable pages is selected then those pages are indicated by italics with a reduced text opacity and the "not-allowed" cursor is shown on hover. There is a limit of 25 pages per dropdown for performance reasons and to avoid the dropdown becoming unwieldy. If the current user is allowed to add new pages under the parent page an "Add New" link is shown at the bottom of the breadcrumb dropdown. If the currently edited page has children or the user may add children, a caret at the end of the breadcrumbs reveals a dropdown of up to the first 25 children and/or an "Add New" link. Overriding the listed siblings for a page If you want to override the siblings that are listed in the Page Edit dropdowns you can hook the BreadcrumbDropdowns::getSiblings method and change the returned PageArray. For most use cases this won't be necessary. Incompatibilities This module replaces the AdminThemeUikit::renderBreadcrumbs method so will potentially be incompatible with other modules that hook the same method. https://modules.processwire.com/modules/breadcrumb-dropdowns/ https://github.com/Toutouwai/BreadcrumbDropdowns
    1 point
  14. Ok, let's make it really simple for people using chrome to do this If you are using chrome do this to have PW search with google on the omnibox by simply typing "pw [spacebar]" 1. right click on the omnibox and chose "Edit Search Engines" 2. scroll down until you find these input fields 3. Fill them as in the image: third field should be https://www.google.com/search?q=site:processwire.com%2Ftalk++-site:processwire.com%2Ftalk%2Fmembers%2F+-site:processwire.com%2Ftalk%2Fuser%2F+%s This is the equivalent to this search in Google: "site:processwire.com/talk -site:processwire.com/talk/members/ -site:processwire.com/talk/user/ %s" where %s is the query 4. type "pw [spacebar] Edit Search Engines" and see if this thread appears in first PS: I'm sure there is an equivalent way to do this in other browsers, but I'm not going to look for that now. Edit: simplified the url
    1 point
  15. Visit Pigtail Pundits For a digital agency, finding the time to do your own website is always difficult. It gets marred by other priorities - new projects and ongoing projects. Unless of course, there’s some slack, and you’re alert to leverage it. We were lucky to steal some 30 odd days from other work. In the bargain we revamped our old website into something fresh, complete with updates on our newer solutions and Case Studies. The Thinking Behind the Design & Copy The whole subject of digital marketing is abstract and fuzzy to most clients. Jargon, complicates its understanding further. If we could use a familiar metaphor to describe the digital marketing solutions that we provide along with its benefits, we could perhaps inch closer to getting messages understood. Or so we thought. Equally, we could introduce some flavour into the language that metaphors do allow. Metaphors, by the way, are double-edged swords. It clarifies and also confuses. It tickles your imagination. It can also put people off. Extreme reactions, we felt, are far better than neutral ones. That was a risk that we decided to take knowing the consequences. The theme lends itself to some delightful metaphors which are not part of the usual digital marketing lexicon. The tone is aggressive. The metaphors help in blunting the sharpness. The metaphors color the language and visuals. The overall effect of this is unique. We also attempted to peel off some of the fuzziness that exists in digital marketing, especially in India, using copy. We tried to identify with the pains of the customer and then focus on our solutions as the best answers to the pains. We followed the StoryBrand framework by Donald Miller to craft the copy in the Solutions section. Visit Pigtail Pundits Under the Hood We have been votaries of ProcessWire since 2014 and have always used it on our own and client projects to great benefit. This occasion too was no different for our own website. Under the hood it uses Processwire CMS Bootstrap for theming Form Builder ProCache [gives us a page speed between 2 and 3 secs] Custom PHP for image alt tags SVG icons to reduce the weight and improve page speed. Visit Pigtail Pundits Bouquets and brickbats, welcome.
    1 point
  16. No, absolutely not ? You just have to make sure that it is loaded properly. I'd recommend you name your field and place everything in a separate related php file to keep everything clean and organized. You'll end up with much nicer processmodules like this one: The yourfield.php file can look like this: <?php namespace ProcessWire; $this->rg->assets->add($this->config->paths->siteModules . 'FieldtypeRockGrid/lib/moment.min.js'); $this->rg->assets->add($this->config->paths->siteModules . 'FieldtypeRockGrid/lib/currency.min.js'); // your finder here $finder = ... // set data $this->setData($finder); // send variables to JS // for example you can send an array of key/value pairs of a select options field // in the grid you can then replace the options ID that is returned by the finder with the corresponding label // like that (pseudocode): cellRenderer = function(params) { return grid.js.youroptions[key] } $this->js([ 'youroptions' => $youroptions, ]);
    1 point
  17. As an early adopter of Padloper I´m glad it will continue to be supported, specially by a loved member of Processwire community @kogondo May it brings happy times for us all. I wonder why change the name from padloper to processwireshop I know is more straightfoward but I liked padloper too :) Nevertheless congrats :D
    1 point
  18. Ah, ok. Didn't know what you need exactly and thought I'd share it with you. I'll have an update filter-wise for you (and of course everybody else) soon on the dev-branch ?
    1 point
  19. The WordPress plugin directory moved from download counts to active installs instead, since downloading does not mean it is actually being used. The problem with "active installs" is that the system needs to report it, which is both data leak to a third party and unnecessary requests to "some servers". I still think some sort of indicator of the "willingness / ability" of continued support would be good. By ability I mean the plugin is not abandoned, actively maintained, etc...
    1 point
  20. Congrats @kongondo on your new endeavor! I think the pricing model you've mentioned is pretty much the defacto pricing model for most quality software products out in the market. Increasingly, software is turning to the SAAS model, so the pricing model reflects market trends right now. In fact, if you're not adopting this model, you should ask why you are unable/unwilling to do so.
    1 point
  21. Thanks Ryan, that is fantastic! I was curious about which would be faster, but after testing both functions they seem to be nearly identical in terms of speed.
    1 point
  22. Thanks Steve, it should be fixed in the latest version just committed.
    1 point
  23. Agreed. In template files I personally prefer <?php foreach (): ?> ... <?php endforeach; ?> (and similar syntax for if...endif etc.) and for output the short echo syntax (<?= $some_var ?>) makes sense, but I'd also advice against using short opening tags (<? ... ?>). Although it remains a part of PHP syntax, there's no guarantee that it's always going to be enabled, and it's commonly frowned upon by PHP devs ?
    1 point
  24. I create a 'ready.php' in the '/site' folder. This is where you can put your class and you can access it anywhere. If you need to re-use it or plan on releasing it, or just want to keep your code tidy. I would use a module.
    1 point
  25. $string = '{mailto address="someone@domain.com" encode="javascript" text="link text" subject="The subject line"}'; function mailtoArray($input) { preg_match_all('/(?<attr>[\w]+)=\"(?<value>.[^\"]+)\"/i', $input, $matches, PREG_SET_ORDER); return $matches; } if (strpos($string, '{mailto') !== false) { $matches = mailtoArray($string); print_r($matches); } I would do it that way. One of the matches is the entire tag, it's [0], then [1] or ['attr'] is group match 1 and [2] or ['value'] is group match 2. However you can do a string replace on just match 1 to format it to an anchor tag.
    1 point
  26. A small news about Duplicator and why its not updated recently: On the current state of the module, it is usable for small website, I mean small database (I am aware of the issue which include the parent directory in the compressed package which make the package non deployable by the installer). As stated by Ryan itself, If you are working with really large files, it may be better to perform that task directly in PhpMyAdmin or the native MySQL client. And as I am working now with giga-sized databases, its the time to rewrite this module. So what is planned ? Duplicator will be made on top of PHPBU in the hope to provide to the community a professional focused backup service for your websites. More information : Future requirement: PHP 7.x.x The official repo : https://github.com/sebastianfeldmann/phpbu Any suggestion welcome. Have a nice day ! ✌️
    1 point
  27. http://directory.processwire.com/map/
    1 point
  28. I got tired of having to open the link dialog in CKEditor in order to check where a link is pointing to, so made this simple plugin. Link Hover A plugin for CKEditor. Shows the href attribute of a link in a tooltip when the link is hovered. This saves you from having to open the link dialog in order to check where a link points to. Installation This readme assumes installation in ProcessWire CMS. The plugin folder must be named "linkhover" – if necessary, rename the folder to remove the "-master" suffix added by GitHub. Copy the "linkhover" folder to /site/modules/InputfieldCKEditor/plugins/ In the field settings for each CKEditor field that you want to activate the plugin for, check the "linkhover" checkbox at Input > Plugins > Extra Plugins https://github.com/Toutouwai/linkhover
    1 point
  29. A couple more options for searching the PW website more easily: 1) New search feature in the ProcessWire Info panel in TracyDebugger https://processwire.com/talk/topic/12208-tracy-debugger/?do=findComment&comment=153342 2) Custom search for Alfred (customizable Spotlight type app for Mac) Simply type "pw" and then your search term: These are the settings to configure Alfred to do this search: https://www.google.com/search?q=site%3Aprocesswire.com%2F {query} You might also want to consider adding the following: pwapi : https://www.google.com/search?q=site%3Aprocesswire.com%2Fapi%2Fref%2F {query} pwblog : https://www.google.com/search?q=site%3Aprocesswire.com%2Fblog%2F {query} pwtalk : https://www.google.com/search?q=site%3Aprocesswire.com%2Ftalk%2F {query}
    1 point
  30. Hey Marty, Unfortunately I never got around to finishing it - I just took a quick look at what I have and I think that rather than being a dedicated module, it might be better to convert it to an Action for ListerPro. I know that will obviously mean that you'll need a ListerPro license, but leveraging LP's ability to perform actions on just matched pages and its built-in batching will make for a more powerful and performant tool.
    1 point
  31. 1and1 check your htaccess I know this problem there # RewriteBase / # RewriteBase /pw/ # RewriteBase /~user/ change to RewriteBase / # RewriteBase /pw/ # RewriteBase /~user/
    1 point
  32. Absolutely and I have done that several times in the past, but I want to create a tool that can be used by your clients for site maintenance.
    1 point
  33. Hey Pete - nice one! I know your code is meant as a quick snippet to get the job done, so no offense intended, but the concerns I have with this is: On a site with a LOT of pages, that could be very slow. I don't like the fact that it re-saves every page, regardless of whether there is a change or not, which will affect the modified date and modified user. I have actually already made a start on a feature rich search and replace module which I will get around to finishing up sometime soon. It provides the ability for searching and then showing the search term in context for each match. You can then choose which matches get replaced, or replace all. Stay tuned!
    1 point
×
×
  • Create New...