• Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By JohnK
      When I was building a little commercial Processwire website for a family member, I started looking into caching with WireCache and somehow had troubles to find a satisfying solution to organize the caches and their expirations. My site had a few parts that updated in a regular manner while other parts should be refreshed whenever the current page - or e.g. for the menu: any page - was saved. I wanted to create a cache of the whole page's html which should expire whenever any of its parts expired. This would be simple if you could set multiple expire values for one cache. Unfortunately, you can only set one. So I started to build a solution to my problem which uses the WireCache and creates a dependency tree for every cache. And since I haven't yet implemented a Processwire module and this little class might be useful for other websites, too, I thought I'd try to make a module out of it. This is it.
      Github: https://github.com/janKir/CacheNesting
      Please have a look, and feel free to leave a comment. This is my first module, so any suggestions are welcome. I am not even sure if my approach makes much sense for performance reasons. I'm happy to hear your opinions!
      Thanks a lot!
    • By kongondo
      Process Sites Manager
      ProcessWire supports multiple site setups using various methods. One of the more common approaches is running multiple sites from the same core installation with each site maintaining its own database (aka option #1). This approach requires the site admin to initially install ProcessWire in a temporary directory for each new site. The directory then needs to be renamed as site-xxx, where ‘xxx’ is any name you want to use to differentiate the installation from other sites, before it is moved to the webroot. For instance, site-mysite, site-another, site-whatever. In addition, the /wire/index.config.php file must be copied/moved to the webroot. Each time a site is added, the index.config.php has to be edited to add ‘domain’ => ‘site-directory’ key=>value pairs for the site. This process can become a bit tedious. This module aims to automate the whole process.
      The module is based off the official ProcessWire installer. Creating a site is as simple as completing and submitting a single form! The module will:
      Install a ProcessWire site in your named directory, applying chmod values as specified
      Move the directory to your webroot
      Update/Create a Superuser account as per the submitted form, including setting the desired admin theme and colour
      Update sites.json (used by index.config.php to get array of installed sites)
      Please note that this module is not a multiple sites solution! It is just a helper class for those using option #1. Your multi-sites solution will still be delivered by ProcessWire core. The only difference is index.config.php is slightly different from the one that ships with ProcessWire.
      This module works as expected. However, it needs a bit more testing in different environments. In light of this, it is labelled as alpha and should not be used in a production environment.
      Download from GitHub: Sites Manager
      Install unlimited number of sites in one ProcessWire install
      Choose an Admin Theme to auto-install along with the site installation
      Install and maintain site profiles for reuse to create other sites
      Client and server-side validation of site creation form
      Edit uploaded profiles (e.g., replace profile file)
      Lock installed sites and profiles to prevent editing
      Bulk delete site profiles, installed site directories and/or databases (confirmation required for latter two)
      View important site details (admin login, chmod, etc)
      Links to installed sites home and admin pages
      Timezones auto-complete/-suggest
      Installations’ domains/sub-domains must exist before installing the site. This is needed in order to update/save the Superuser account for the new site. For instance, if creating a site with the subdomain blog.mydomain.com (with directory site-blog), that subdomain must be active. For local development, if using Apache, for instance, a virtual host directive for blog.mydomain.com must have been set up prior to the installation. For remote/live sites, the subdomain must have been set up at your Domain Name Registrar.
      Site Profiles
      You will need to prepare site profiles for use with the module. Example site profiles ship with ProcessWire. These include ‘site-default’, ‘site-classic’, ‘site-blank’, etc. The module only accepts zip files. Each of these folders needs to be compressed into a zip file, for instance ‘site-default.zip’, ‘site-languages.zip’, etc. Please note that the other content you get with ProcessWire downloads are not required. These include the wire folder and .gitignore, index.php, etc files. Do not include any of these in the ‘site-whatever.zip’.
      You are not limited to using the site profiles that ship with ProcessWire. You can create and use your own custom profiles as long as they are structured according to the format ProcessWire expects (@see site-default that ships with ProcessWire as an example).
      Install the module like any other. It will create required templates, fields and pages (hidden in admin under Multi Sites). The install will also copy two files to your webroot; sites.json and index.config.php. If any identical module components (field, templates, files, etc) are found in your system, the module will not install but will instead error out with a relevant message.
      Module Files
      The two file sites.json and index.config.php should not be removed from your webroot if you are using this module. The former should remain writable at all times. The index.config.php is a modified version of the one that ships with ProcessWire. Rather than editing the file directly with new entries for installed sites, it fetches the information about multi-sites sites that ProcessWire needs to serve directly from the site.json contents which it converts to an array before passing off to ProcessWire. We haven’t done any real-world testing (yet) but have not observed any noticeable delays in serving the multi-sites sites in this manner.
      The module will be useful in both development and production (@see note above! When ready) environments.
      For development work, there are times when you need to quickly put up a temporary site to test something, debug an install or create a mock website to present draft ideas to a client, etc. This module allows you to do all these, and more, easily and quickly.
      For live sites, the module can be a time saver, allowing you to install and manage (very limited feature-set at present) your sites from one dashboard.
      Site Profiles
      The first thing to do after installing the module is to upload at least one site profile. In the Upload page, complete the ‘upload a site profile form’. Give the profile upload a title, optionally a description (good reminder about what the profile features), ProcessWire compatibility and of course the profile zip file itself. Profile uploads are saved as hidden pages in the admin. This enables reuse of the profile, so that you don’t have to upload it over and over every time you need to install a site.
      Uploaded profiles are listed under the page Profiles. Head over there to see a list of available profiles. Using this page, you can edit individual profiles, e.g. change the title or replace the profile zip file. You can also lock/unlock or delete profiles. You are now ready to create sites.
      Create/Install Sites
      Head over to the Create page. This is where the automation really happens. Complete the form as required. Most of the inputs/fields should be familiar if you’ve ever installed ProcessWire. All fields, except for Description and HTTP Host Names, must be completed. It is recommended to complete these as well. Each field is accompanied by an explanation about what what it does (straight off the ProcessWire install you are used to). One bonus you get is you are able to select both an Admin Theme and Colour Theme to install! If you like AdminThemeReno in Blue, for instance, you can have that installed for you. Another bonus is the Default Timezone field. It uses auto-complete so that you don’t have to type the whole timezone name. Please note that, unlike in the official installer, profile previews are not (currently?) available.
      When you are happy with your settings click save to start the install. Please note that due to the additional client-side validation, if any of the checks fail, the errors to correct will be displayed in a modal and the form will not be submitted. Checks include mismatched Superuser passwords, empty required fields, invalid emails, short admin login URL/name, etc.
      If all went well, the site should install! Please note that currently (and a tad annoyingly!), the install will abort (sometimes half-way), if it hits an error. This has nothing to do with the official ProcessWire install but the checks we have put in the module code, currently. Hopefully, with feedback from the community, we can change how the module deals with errors. Most errors, if they appear, will be related to the file system...cannot write to file blah blah, etc.
      If you clicked on the button Save & View Sites, you should, momentarily (it may take a while depending on your system), see your new site on the page Installed. Otherwise, navigate to that page.
      On this page you see a list of installed sites and information about them. To view your site, click on the link in Domain. The site opens in a new tab. To head straight to the admin, click on the link in Admin Login. Log in with the Superuser credentials you supplied on the ‘create site form’. Voilà! Your new site’s admin with the theme and colours your selected applied for the Superuser!
      On the Installed sites page, you can lock/unlock the installed sites records (the pages). You can also bulk delete the sites’ directories (the site-mydomain directories in webroot) and/or their databases. A dialog appears asking you to confirm these latter two actions. Be careful with these! They are useful for erasing temporary test sites but you need to double check your intended action. It is therefore advisable to lock sites to prevent unintended erasure.
      Deleting a site’s directory and/or database also deletes its associated page record. This means you won’t be able to view it in the Installed page.
      Use this to make a clean getaway before uninstalling the module. The page will also allow you to specify whether you wish to delete the sites.json and index.config.php files from your webroot.
      Only Superusers can use the module.
      ProcessWire 2.7 - 3.x compatible
      Currently using ProcessWire 2.7 installer (install.php)
      Potential race condition when sites.json is being updated on a new site install vs. index.config.php accessing the json file?
      Not tested with sub-directory installs (for instance localhost/pw/my-site-here/)
      Currently not doing the extra/experimental database stuff (database charset and engine)
      Future Possibilities
      Install specified modules along with the ProcessWire install
      Create installation profiles and/or allow JSON/CSV install configurations (useful for repetitive values, e.g. where Superuser email doesn’t change)
      Profile previews?
      @ryan: for the ProcessWire installer
      @abdus: for the index.config.php reading from JSON idea
      @swampmusic: for the challenge
      Please help test and report any issues. Feature suggestions are also welcome. Comments on anything from UX to technical stuff to make this as robust as possible are appreciated.
      Video Demo
      Quick Demo (excuse the video quality please )

    • By Robin S
      Some introduction...
      This module is experimental and there are probably bugs - so treat it as alpha and don't use it on production websites.
      I started on this module because there have been quite a few requests for "fake" or "invisible" parent functionality and I was curious about what is possible given that the idea sort of goes against the PW page structure philosophy. I'm not sure that I will use this module myself, just because I don't really see a long list of pages under Home (or anywhere else) as untidy or cluttered. I would tend to use Lister Pro when I want to see some set of pages as a self-contained group. But maybe others will find it useful.
      At the moment this module does not manipulate the breadcrumb menu in admin. So when you are editing or adding a virtual child the real location of the page is revealed in the breadcrumb menu. That's because I don't see the point in trying to comprehensively fool users about the real location of pages - I think it's better that they have some understanding of where the pages really are. But I'm open to feedback on this and it is possible to alter the breadcrumbs if there's a consensus that it would be better that way.
      Virtual Parents
      Allows pages in Page List to be grouped under a virtual parent.
      This module manipulates the page list and the flyout tree menu to make it appear that one or more pages are children of another page when in fact they are siblings of that page.
      Why would you do that instead of actually putting the child pages inside the parent? Mainly if you want to avoid adding the parent name as part of the URL. For example, suppose you have some pages that you want to be accessed at URLs directly off the site root: yourdomain.com/some-page/. But in the page list you want them to be appear under a parent for the sake of visual grouping or to declutter the page list under Home.
      Example of how the page structure actually is

      Example of how the page structure appears with Virtual Parents activated

      How it works
      This module identifies the virtual parents and virtual children by way of template. You define a single template as the virtual parent template and one or more templates as the virtual child templates. Anytime pages using the child template(s) are siblings of a page using the parent template, those child pages will appear as children of the virtual parent in the page list and tree menu.
      You will want to create dedicated templates for identifying virtual parents and virtual children and reserve them just for use with this module.
      Adjusts both page list and tree flyout menu to show the virtual parent/child structure, including the count of child pages. Works everywhere page list is used: Page List Select / Page List Select Multiple (and therefore CKEditor link dialog). Intercepts the "Add page" process in admin, so that when an attempt is made to add a child to a virtual parent, the child is added where it belongs (the next level up) and the template selection is limited to virtual child templates. Intercepts moving and sorting pages in the page list, to ensure only virtual children may be moved/sorted under the virtual parent. Superusers have a toggle switch at the bottom of the page list to easily disable/enable Virtual Parents in order to get a view of what the real page structure is. Usage
      Install the Virtual Parents module.
      In the module config, enter pairs of parent/child template names in the form virtual_parent_template=virtual_child_template. If needed you can specify multiple pipe-separated child templates: virtual_parent_template=child_template_1|child_template_2. One pair of template names per line.
      There is a checkbox in the module config to toggle Virtual Pages on and off, but it's more convenient to use this from the page list.
      It's important to keep in mind the real location of the virtual child pages. This module is only concerned with adjusting the appearance of page list and tree menu for the sake of visual grouping and tidiness. In all other respects the virtual children are not children of the virtual parent at all.
      It's recommended to select an icon for the virtual parent template (Advanced tab) so virtual parents are marked out in the page list as being different from normal parent pages.
      Do not place real children under a virtual parent. There is some protection against this when moving pages in the page list, but when it comes to changing a page's parent via the Settings tab the only protection is common sense.
    • By ukyo
      Call ProcessWire API Functions Inside STRING
      Github Repo
      Current status : BETA
      Each called method must return string value !
      I added all functions, but not tested all. I focused page(), page()->render and field properties (label, description and notes). I also tested some basic pages() api calls.
      Your API calls must start with { and must end with }. For use multiple arguments inside functions, separate arguments with ~ char.
      NOTE If you pass directly arguments to api {page(title)}, this call will check for requestedApiCall()->get(arguments).
      processString(string, page, language); Get page title <?php $str = "You are here : {page:title}"; echo processString($str); ?> Get page children render result <?php $str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.<hr>{page:render:children}"; echo processString($str); ?> Get homepage title <?php $str = "You can visit our <a hre='{pages(1):url}'>{pages:get(1):title}</a>"; echo processString($str); ?> Get title field label, description or notes <?php $str = "Our title field properties are : label: {label(title)} - description: {description(title)} - notes: {notes(title)}"; echo processString($str); ?> Multiple examples <?php $str = " <ul class='uk-list uk-list-striped'> <li><b>01: GET FIELD LABEL</b> <code>&#123;label(title)&#125;</code> <b>RESULT :</b> <code>{label(title)}</code></li> <li><b>02: GET FIELD LABEL WITH PREFIX</b> <code>&#123;label(title~=> )&#125;</code> <b>RESULT :</b> <code>{label(title~=> )}</code></li> <li><b>03: GET FIELD LABEL WITH SUFFIX</b> <code>&#123;label(title~~ <=)&#125;</code> <b>RESULT :</b> <code>{label(title~~ <=)}</code></li> <li><b>04: GET FIELD DESCRIPTION</b> <code>&#123;description(title)&#125;</code> <b>RESULT :</b> <code>{description(title)}</code><br> <li><b>05: GET FIELD DESCRIPTION WITH PREFIX</b> <code>&#123;description(title~=> )&#125;</code> <b>RESULT :</b> <code>{description(title~=> )}</code></li> <li><b>06: GET FIELD DESCRIPTION WITH SUFFIX</b> <code>&#123;description(title~~ <=)&#125;</code> <b>RESULT :</b> <code>{description(title~~ <=)}</code></li> <li><b>07: GET FIELD NOTES</b> <code>&#123;notes(title)&#125;</code> <b>RESULT :</b> <code>{notes(title)}</code><br> <li><b>08: GET FIELD NOTES WITH PREFIX</b> <code>&#123;notes(title~=> )&#125;</code> <b>RESULT :</b> <code>{notes(title~=> )}</code></li> <li><b>09: GET FIELD NOTES WITH SUFFIX</b> <code>&#123;notes(title~~ <=)&#125;</code> <b>RESULT :</b> <code>{notes(title~~ <=)}</code></li> <li><b>10: GET PAGE TITLE</b> <code>&#123;page(title)&#125;</code> <b>RESULT :</b> <code>{page(title)}</code></li> <li><b>11: GET PAGE TITLE</b> <code>&#123;page:title&#125;</code> <b>RESULT :</b> <code>{page:title}</code></li> <li><b>12: GET PAGE RENDER TITLE</b> <code>&#123;page:render:title&#125;</code> <b>RESULT :</b> <code>{page:render:title}</code></li> <li><b>12: GET HOMEPAGE TITLE</b> <code>&#123;pages:get(template=home):title&#125;</code> <b>RESULT :</b> <code>{pages:get(template=home):title}</code></li> <li><b>13: GET HOMEPAGE TEMPLATE ID</b> <code>&#123;pages:get(template=home):template:id&#125;</code> <b>RESULT :</b> <code>{pages:get(template=home):template:id}</code></li> </ul> "; echo processString($str); ?>
    • By Robin S
      This module corrects a few things that I find awkward about the "Add New Template" workflow in the PW admin. I opened a wishlist topic a while back because it would good to resolve some of these things in the core, but this module is a stopgap for now.
      Originally I was going to share these as a few standalone hooks, but decided to bundle them together in a configurable module instead. This module should be considered alpha until it has gone through some more testing.
      Add Template Enhancements
      Adds some efficiency enhancements when adding or cloning templates via admin.

      Derive template label from name: if you like to give each of your templates a label then this feature can save some time. When one or more new templates are added in admin a label is derived automatically from the name. There are options for underscore/hyphen replacement and capitalisation of the label. Edit template after add: when adding only a single template, the template is automatically opened for editing after it is added. Copy field contexts when cloning: this copies the field contexts (a.k.a. overrides such as column width, label and description) from the source template to the new template when using the "Duplicate/clone this template?" feature on the Advanced tab. Copy field contexts when duplicating fields: this copies the field contexts if you select the "Duplicate fields used by another template" option when adding a new template. Usage
      Install the Add Template Enhancements module.
      Configure the module settings according to what suits you.