Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 09/30/2015 in all areas

  1. Hey guys, we published a new website made with PW. Anja is a German artist. We designed an exhibition catalog for her previously, and now she asked us to create her website. Here it is: http://anjawiebelt.com/ The site is extremely simple, and PW didn't have to do anything too heavy, besides some calculations for displaying the dates in the right order. Most of the work was on the frontend and went into creating the customised slideshow — see also the responsive version. See also on our website for more details http://ed-works.com/projects/anjawiebelt.com/ If you see any issue, please tell
    7 points
  2. ProcessWire is under active development, and will be for the foreseeable future. Please see the 'dev' branch for more recent commits (the most recent one was made 1 minute ago). Also check out the blog for information about latest updates to ProcessWire. Additionally, I am not aware of any 'hacks' - ProcessWire is a very safe and secure system. Only 'bad modules' could create the potential for a hack, but that doesn't seem to have ever happened.
    5 points
  3. That is true, hacking happens all the time. The thing with ProcessWire is that the system is not as well-known (that is to say that it is not as widely-used) as WordPress/Drupal/Joomla, etc. As such, attempts are very rare. Ryan Cramer is the creator of the project, and pours a lot of effort into improving it. Suggestions are always welcome, and there are a few others that work with Ryan on specific features (so far as I am aware - perhaps someone else can elaborate on that). Nonetheless, Ryan is the primary developer and, as such, makes the vast majority of changes. You're very welcome indeed. Hope you enjoy using ProcessWire - it's certainly been a great journey for me. I love it, clients love it - it's just a win-win for everyone, really.
    3 points
  4. I have a lot of faith in Processwire's future. I´m a graphic designer who happens to do web development, and I could not be happier with how easy it is to grasp Processwire's foundations and even more complex coding like making modules. So I think in the near future we will see a lot of non-technical background people having "AHA" moments when finding out about Processwire. I mean, the API is just pants dropper!
    3 points
  5. It depends how you define "longterm". We (Avoine) started using ProcessWire 2011 for inhouse projects and 2012 for clients. 6 years soon, and I feel we are just getting started. PW 2.0 was released 2010, but it's roots are in 2003: https://processwire.com/about/background/ So I would say PW is longterm.
    3 points
  6. Docker (http://www.docker.com) is an open platform for building, shipping and running distributed applications. Docker containers are a great way to package a complete application with its specific dependencies in a portable way so that it can easily be deployed on any compatible network or cloud infrastructure. Recently I spent a few days making my ProcessWire site run in a Docker container, and - as I could not find any good tutorial for this - it sounded like a good idea to write one. You will find on the web plenty of presentations and tutorials about Docker, so I won't start with the basic concepts, and this tuto assumes that you have a first understanding of Docker's fundamentals. What we want to do here is to migrate an existing site to a set of docker containers. Therefore, to start with, you should have: - docker installed on your computer; - the site directory of your ProcessWIre site - a backup of your site's MySQL database Let's start. Create a docker container for the site database For several reasons (insulation, security, scalability), it is preferable to host the site database in a separate docker container. 1. Set-up a SQL database with MariaDb or MySQL $ docker run --name database -e MYSQL_ROOT_PASSWORD=rootdbpassword -d mariadb Here I choose to use the MariaDB official container in its latest version, but MySQLwould be just fine as well. 2. Run a PhpMyAdmin container and create the ProcessWire database We first select an simple image with PhpMyAdmin on the Docker Hub: nazarpc/phpmyadmin and we create a docker container based on this image. This container will access the port exposed by the database container via a private networking interface. We specify this with the `--link` option. It can be run temporarily (and exited by ctrl-C): docker run --rm --link database:mysql -p 8881:80 nazarpc/phpmyadmin Or it can be run as a daemon in the background: docker run -d --name phpmyadmin --link database:mysql -p 8881:80 nazarpc/phpmyadmin From phpmyadmin (accessed from your browser at http://hostaddress:8881) you can now create your ProcessWire database, create a dedicated user for it, and import the database content from a previously saved SQL file. Note: alternatively, you can do all database operations from the command line in the database docker container created during step 1, or use another mysql user interface container if you prefer… 3. Update the database parameters in your site configuration In your site's `config.php` file, the sql server name shall be set to `mysql`: $config->dbHost = 'mysql'; Other `$config->dbXxx` settings shall match the database name, user and password of the just-created database. Create a Docker Image for Apache, PHP and the Processwire site 1. Create an image-specific directory with the following contents and `cd` to it bash-3.2$ ls -l . config .: total 16 -rw-rw-rw- 1 jean-luc staff 1163 21 aoû 12:09 Dockerfile drwxr-xr-x 17 jean-luc staff 578 17 aoû 12:48 ProcessWire drwxr-xr-x 7 jean-luc staff 238 21 aoû 12:07 config drwxr-xr-x 7 jean-luc staff 238 20 aoû 18:46 site config: total 160 -rw-rw-rw- 1 jean-luc staff 160 20 aoû 18:28 msmtprc -rw-rw-rw- 1 jean-luc staff 72518 20 aoû 18:56 php.ini where: `ProcessWire` contains the version of ProcessWire that we want to use for this site; It can be retrieved from github with a link like https://github.com/ryancramerdesign/ProcessWire/archive/{version}.zip` For example, the 2.6.13 dev version can be obtained by the link https://github.com/ryancramerdesign/ProcessWire/archive/7d37db8d6b4ca6a132e50aff496a70e48fcd2284.zip `site`: our site-specific files `Dockerfile`: the dockerfile for building the image (see below) `config`: a directory containing specific configuration files copied to the docker image (see below) 2. Set the `Dockerfile` content FROM php:5.6-apache RUN apt-get update \ && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng12-dev zziplib-bin msmtp\ && a2enmod rewrite \ && a2enmod ssl \ && docker-php-ext-install mysqli pdo_mysql iconv mcrypt zip \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install gd EXPOSE 80 EXPOSE 443 # Add a specific php.ini file COPY config/php.ini /usr/local/etc/php/ # Configure the mail sent utility msmtp (http://msmtp.sourceforge.net) and make it readable only by www-data COPY config/msmtprc /usr/local/etc/php/ RUN chmod 600 /usr/local/etc/php/msmtprc \ && chown www-data:www-data /usr/local/etc/php/msmtprc # Remove all default site files in /var/www/html RUN rm -fR /var/www/html/* # Copy ProcessWire core files COPY ProcessWire/wire /var/www/html/wire COPY ProcessWire/index.php /var/www/html/index.php COPY ProcessWire/htaccess.txt /var/www/html/.htaccess # Copy site-specific files COPY site /var/www/html/site # Make www-data the owner of site-specific files RUN chown -R www-data:www-data /var/www/html/site VOLUME /var/www/html/site Based on the official image `php:5.6-apache`, it installs missing packages to the system, adds mod-rewrite and mod-ssl to Apache, plus a number of PHP modules needed by Processwire (core or modules): mysqli, pdo_mysql, iconv, mcrypt, zip, and gd. Then it copies the site files to the location expected by the Apache server. Finally it declares a Docker volume `/var/www/html/site` (i.e. the site files and assets), so that it can be shared with other containers. 3. Set the msmtp configuration We need to configure a sendmail utility, so that we can send emails from php, for example when a user registers on the website. The simplest way to do it is to rely on an external smtp server to do the actual sending. That's why we use msmtp. - define the desired smtp account in `config/msmtprc` account celedev-webmaster tls on tls_certcheck off auth on host smtp.celedev.com port 587 user webmaster@celedev.com from webmaster@celedev.com password thepasswordofwebmasteratceledevdotcom - in `config/php.ini`, configure the sendmail command so it uses msmtp: sendmail_path = /usr/bin/msmtp -C /usr/local/etc/php/msmtprc --logfile /var/log/msmtp.log -a celedev-webmaster -t 4. Build the Docker image docker build -t php-5.6-pw-celedev . 5. Create a Data-only container for the site files docker run --name celedev-data php-5.6-pw-celedev echo "Celedev site data-only container" 6. Run the web server container docker run --name celedev-site -p 8088:80 --link database:mysql --volumes-from celedev-data -d php-5.6-pw-celedev Note that this container is linked to our database and shares the 'celedev-data' volume created previously During development, it can be convenient to keep an access to the host file system from the container. For this, we can add a shared volume to the previous command: docker run --name celedev-site -p 8088:80 --link database:mysql -v /Users/jean-luc/web/test-docker:/hostdir --volumes-from celedev-data -d php-5.6-pw-celedev Our ProcessWire website is now up and running and we can test it in our browser at http://hostaddress:8088. Great! What we now have in Docker bash-3.2$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE php-5.6-pw-celedev latest 2aaeb241c2e2 3 hours ago 1.149 GB nazarpc/phpmyadmin latest e25cd4fd48b3 8 days ago 521 MB mariadb latest dd208bafcc33 2 weeks ago 302.2 MB debian latest 9a61b6b1315e 5 weeks ago 125.2 MB bash-3.2$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 68cc5d976f0d php-5.6-pw-celedev "apache2-foreground" 20 hours ago Up 20 hours 443/tcp, 0.0.0.0:8088->80/tcp celedev-site 0729fe6d6752 php-5.6-pw-celedev "echo 'Celedev site d" 20 hours ago Exited (0) 20 hours ago celedev-data e3e9e3a4715c mariadb "/docker-entrypoint.s" 3 days ago Up 3 days 3306/tcp database Saving the site data We can create an archive of the site files by running a tar command in a dedicated container: bash-3.2$ docker run --rm -it --volumes-from celedev-data -v /Users/jean-luc/web/test-docker:/hostdir debian /bin/bash root@2973c5af3eaf:/# cd /var/www/html/ root@2973c5af3eaf:/var/www/html# tar cvf /hostdir/backup.tar site root@2973c5af3eaf:exit bash-3.2$ Tagging and archiving the Docker image We can also add a tag to the docker image that we have created in step 4 (recommended): bash-3.2$ docker tag 2aaeb241c2e2 php-5.6-pw-celedev:0.11 bash-3.2$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE php-5.6-pw-celedev latest 2aaeb241c2e2 3 hours ago 1.149 GB php-5.6-pw-celedev 0.11 2aaeb241c2e2 3 hours ago 1.149 GB nazarpc/phpmyadmin latest e25cd4fd48b3 8 days ago 521 MB mariadb latest dd208bafcc33 2 weeks ago 302.2 MB And we can archive this image locally if we dont want to push it now to the Docker Hub: bash-3.2$ docker save php-5.6-pw-celedev:0.11 | gzip > php-5.6-pw-celedev-0.11.tar.gz And that's it! You now have a portable image of your ProcessWire website that you can run directly on any docker-compatible system.
    2 points
  7. There are arguments both for and against have many contributors on a project - I have been involved with OS projects at both ends of the spectrum and while it may appear to be a limitation on the surface to have less contributors, the advantage is that with all code changes going through Ryan we can be sure that the high standard he has set is being maintained. There are many more than 4 contributors to the core - most of those with the STAFF badge have made contributions (and probably many more without) and you will likely see their name/handle mentioned in the core code on the features they have contributed to. If you are worried that only one core developer will mean slower progress with adding of new features, I think the weekly blog posts and GH commits show that this is not an issue! - what other CMS is getting as many cool new features as PW on a weekly basis? Who knows whether this will change in the future for PW, and certainly no software will live forever, but for the relevant future timeframe there are plenty of users around here who will want to keep this project progressing should anything happen to Ryan (either physically or with changes to his priorities), but I know that somewhere in these forums he committed to working on PW for the rest of his career.
    2 points
  8. Very nice indeed. A website, once in a while, where the one page design actually makes sense. Only small issue I just noticed. The active indicator in the menu doesn't jump to "contact" for me even if I scroll to the very bottom, but it's an iMac with 1440px display height. That may be the reason.
    2 points
  9. maybe you don't need to used delayed output? it can make many things more trouble than it's worth. Have you tried the simple include head/foot method.
    2 points
  10. Perhaps you should ask about PHP's future instead. ProcessWire is only a tool that helps you utilizing its features. There might come other similarly handy tools in the future but currently it's among the bests. So I guess PHP will stay with us for a while and I'm sure PW too
    2 points
  11. 1,5 month later, after I did most of the project and be sure that I understand PW system, I finally finished that part. It's not perfect of course but it's working fine. Here is how I did it: Templates And Fields: I created 2 templates: grid and grid_item and 1 pagetableextended field grid_items. In grids page I can enter grid_items like below: Title, summary, featured_image for content on the grid items, external url for obvious reasons, grid_ratio is to determine size of item. Design is limited with ratios from 1x1 to 3x3, so I made it selectable page items from options use_border : for images with white bg, so they don't look like they are floating Modules I have created 3 modules. InputfieldGridBuilder,FieldtypeGridBuilder and GridBuilder. Whenever I save the page, new items from grid_items pagetable are available to use like below. I can order items, add new rows, delete row etc. Whenever I change something, there is a method that works to serialize data to the hidden input field,InputfieldGridBuilder. Also, just in case I call the function it every 5 seconds. I make a small fixed grid that is very similar to the one used in the frontend. So anything that you can do here with jQueryui sortables, it's available for using in the frontend. Last module GridBuilder is used for mostly utility purposes for both frontend and backend. It has methods like getItemSize, getItemImage, build etc. Frontend Normally these will be used in homepage but I made the view of page available to users with editing roles, so before using them they can see that it look like. For example this one in the gif above looks like this. So even with the empty rows, it works. And for using in the homepage, I added a multiple selection page field. So they can use more than one grid, or with the location options we already added they can select to have a different view for different countries. (I added Location settings is globally for every page) Questions, critics, feedbacks or "hi,there buddy"'s are highly welcomed.
    2 points
  12. Edit: The title of this post has been renamed to use the word "processor" instead of "builder" - this is not a form-building module. I'm currently putting together a simple developer-centric form processor for one of my projects, and have decided that I'd like to release it as a module as soon as it's stable enough. The idea is to separate it from the backend, and use per-form configuration files and templates instead. I could well implement a backend solution for this, but my preference is for it to be developer-centric. For me, this makes it easier to use and, of course, develop. Here's how it currently works: developer specifies forms and their particulars in a JSON file stored in the module's directory. The file includes dictations such as the name of the form, the fields it uses (along with their sanitization/validation rules), template information, and a set of emails to send when the form is being processed. An example of such configuration is: { "contact": { "name": "Contact Form", "fields": { "name": { "sanitize": "text", "rules": { "required": "Please enter your name." } }, "email": { "sanitize": "email", "rules": { "required": "We need to know your email address so we can get back to you.", "email": "That doesn't look like a valid email address." } }, "company": { "sanitize": "text", "rules": { "min(4)": "That's a tad short for a company name." } }, "contact": { "sanitize": "text", "rules": { "int": "Please enter only the digits of your phone number (no spaces or other punctuation)." } }, "message": { "sanitize": "entities1|textarea", "textField": true, "rules": { "required": "Please enter your enquiry/message.", "min(250)": "Please enter at least {$0} (but no more than 2000) characters.", "max(2000)": "You have reached the {$0} character limit. Please shorten your message." } } }, "info": { "fromName": "The ABC Accounting Team", "tel": "(011) 100 1234", "altTel": "(011) 100 5678" }, "emails": { "autoReply": { "template": "auto-reply", "to": "{input.name} <{input.email}>", "from": "ABC Accounting <noreply@abc.accounting>", "subject": "Enquiry/Message Submitted - Thanks!" } } } } As seen in the 'emails' key, templates can be defined for each email. These templates can be plain/HTML/both, and accept information regarding form input, the 'info' key, and a custom stylesheet, which is created as a file, but imported directly into the HTML version of the template. The module will also come with a jQuery module to assist in processing the form. Frontend is up to the developer/designer. Currently, the directory structure of the module is: root - forms.config.json / templates / form-name - template-name.html - template-name.css - template-name.txt I'm now thinking that it would be better to change the structure to this: root / form-name / templates - template-name.html - template-name.css - template-name.txt - config.json That is: each form will have its own folder containing configuration and templates. So I'm starting this thread to ask the following: Firstly, what do you think of this idea, and do you think you would make use of this module? Of the two structures above, which one would you prefer? Would you want the ability to make use of attachments in your emails (such as a logo)? (If I'm not mistaken, we'd then need to require WireMailSmtp or WireMailSwiftMailer...) As a side note, it's worth mentioning that this module is really intended to be used on small- to medium-sized sites that require multiple forms where developers are not in a position to obtain Ryan's excellent FormBuilder. Any input here is most welcome. (And yes, as gathered by my signature, the module is called SimpleForms. If you have a name suggestion, please feel free...)
    1 point
  13. Hey, The Form API has CSRF protection build in, but if you for some reason don't want to use the API you can however use the CSRF protection. Its very simple but it took some time for me to find out, so i figured i share my findings with the rest. What is CSRF? First you need to create a token and a token name you do that as following: $tokenName = $this->session->CSRF->getTokenName(); $tokenValue = $this->session->CSRF->getTokenValue(); Very simple. Now what you want to do is create a hidden input field like this: $html .= '<input type="hidden" id="_post_token" name="' . $tokenName . '" value="' . $tokenValue . '"/>'; Now this will generate something that will look like this: You are done on the form side. You can now go to the part where you are receiving the post. Then use: $session->CSRF->validate(); This will return true (1) on a valid request and an exception on a bad request. You can test this out to open up your Firebug/Chrome debug console and change the value of the textbox to something else. Basicly what this does is set a session variable with a name (getTokenName) and gives it a hashed value. If a request has a token in it it has to have the same value or it is not send from the correct form. Well I hope I helped someone.
    1 point
  14. Are you asking how to do that? Is the directory not writable?
    1 point
  15. Very nice indeed, great work. Gotta love minimal sites.
    1 point
  16. Soma's module can do it right out of the box - see instructions here. And it is not hard to do it yourself with a has_parent selector (look here). Be more specific and we can help you better .
    1 point
  17. Ok guys - the module now supports batch creation of testing pages. There is a one click option to delete all these pages once you are done. This is also called when the module is uninstalled, although thinking about this some more, I might need to check to see if there are any fields with actual content before deleting as I can see someone repurposing one/several of these "testing" pages for actual content during development. I'll look into this more tomorrow. EDIT: I just added "locked" status to all auto generated pages - hopefully this is enough protection against someone trying to add real content to these pages - any thoughts? Maybe I should check to see if the locked status has been removed when deleting the pages? That way superusers could remove the lock and edit if they really wanted to and know that the page wouldn't be deleted - any thoughts?
    1 point
  18. Delayed output is just another way to generate the full html markup, that is send to the browser. The browser won't get anything different, therefore everything js/css is unaffected of this.
    1 point
  19. Repeaters may seems like a good fit if you're new to pw, but they aren't. Use pages and create a page for each file. This way you've the full freedom of choice about which data is associated to a file and which access roles you need. For categorization and/or frontend-display use pagefields. I also suggest you to read this topic before beginning: https://processwire.com/talk/topic/3579-tutorial-approaches-to-categorising-site-content/
    1 point
  20. CSRF is not there to protect your users from multiple submissions. It's there to ensure that the data send are from the exact user you send the form to, nothing more. If you additionally want to prevent multiple submissions, than use $session->CSRF->resetToken(); on successful submissions. But this would prevent other forms, that the users may already have requested on e.g. another tab, from working. There are other ways to prevent duplicate form submissions, like using redirects. E.g. one way with redirects would be: /my-page-with-form/ -> submits to "submit/" /my-page-with-form/submit/ -> on success redirect back, on error save submitted data, too, to repopulate form …, but you could also simply redirect to the same page in your current code just after $mail->send();
    1 point
  21. The delayed output is not much different from not using it. Instead of just echoing out content immediatelly (no matter if at once or in _header.php -> template.php -> footer.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1><?php echo $page->title; ?></h1> </body> </html> you're going to construct the "content" of the page before any html is outputted. // _init.php $content = ""; // template.php $content .= "<h1>$page->title</h1>"; // _main.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php echo $content; ?> </body> </html> The difference it that you're temp. storing the content (or whatever types you use/need) is stored in a variable until it's echod. The main benefits are that it does allow for later alteration of markup and sometimes cleaner code. Essentially just don't use echo in your template files, but only with the placeholder variables in _main.php and you've delayed output.
    1 point
  22. No worries - not taking suggestions as pressure at all I think the idea of automatic page generation - I am just not sure the best approach yet. Maybe it's a simple matter of maintaining an array of page IDs that are created so that I can offer a "Cleanup all automatically created pages" button, and obviously also run this cleanup when the module is uninstalled. Now to determine the best way to create the pages - should the "create tool" be added to the settings tab of each page? Or maybe it should be part of the main module config settings and do as Raymond suggested - choose parent, template, and number of pages to create. Maybe it's actually pretty simple to handle. Any further thoughts before I dive in?
    1 point
  23. It's true that this might be out of the scope of this project, but it is a great idea. Nothing beats real content when working on a site, but when that's not available yet (or you're not working on an actual site but a module or something like that) it would be cool to be able to easily mock up a given amount of (real) pages, and later remove them just as easily. This would be particularly helpful for testing UIs, performance, and scalability. Just saying, not trying to put any pressure on you Adrian..
    1 point
  24. That NearlyFreeSpeech looks really nice! I might try them for my personal website to save some bucks!
    1 point
  25. Thanks for the thoughts Raymond! Are you are talking about dummy pages that are not actually in the database, but are only rendered on the front-end? That sounds intriguing to me, and I think might be a cool addition to this module - will have to think more about how best to implement. Or, are you talking about adding real pages? I think it might be confusing the role of this module to get into generating pages. I think perhaps what I would recommend is using the "Add" mode of BatchChildEditor to create the pages, then if you have AutoContent installed, the dummy content will be added when the pages are rendered. I could potentially add an "Auto Add" mode to BatchChildEditor which created the x number of pages with random names to make this even quicker. The other reason I wouldn't want to add pages with AutoContent is the subsequent need to delete once you no longer need the dummy pages. BatchChildEditor makes this quick and easy.
    1 point
  26. version 0.0.4 often used string translations enable Language Translator for editors
    1 point
  27. Not APIs, API. Hopefully I don't sound too rude (in a bit of a hurry here), but please check out the docs section. It's all explained there. In addition to that, I'd suggest taking the time to browse through some of the tutorials, in case you prefer a hands-on approach. The kind of questions you're asking here are perfectly understandable from someone just getting started with the system, but it also sounds like you haven't really bothered checking out the docs either. Also, the forum is filled with answers to very similar questions, so you might want to try looking around a bit. To be fair most of your current confusion seems to stem from not understanding many of the basic concepts of ProcessWire, including how it handles content and content types. While it's a bit outdated by now, Ryan's excellent overview video is still a very good starting place in this regard; the UI will look different from what you'll see on your site and your site will have more options and settings to play with, but the basic concepts are the same.
    1 point
  28. Hello everybody, I found about processwire when in search of a new CMS for my sites. Mainly there were articles in blogs that made me curious. I found it difficult at first ... wasn't used to the freedom the system gives me. Yes it's a freedom to have fields and templates for whatever you like. But coming from other cmses one is not used to having that freedom. In most cms you're told what to do where and how. Processwire is different. Also ... the many tutorials are very helpful, the API docs , the forum. Though I didn't need to ask questions here myself up to now I found answers for all the problems that arose while working. Putting it together: I feel comfortable here and hope to make some more sites with it.
    1 point
  29. If you use latest dev https://github.com/kixe/FieldtypeSelectExtOption/tree/dev you could use the following code (since version 1.1.3) $news = $pages->find("template=news_detail"); $arr = []; foreach($news as $n) { echo $n->tag; // returns a string with all values separated by pipe, example: '45|67|89|22' $arr = array_merge($arr,explode('|',$n->tag)); } or (since version 1.1.5) $news = $pages->find("template=news_detail"); $arr = []; foreach($news as $n) $arr = array_merge($arr,$n->tag->getKeys()); var_dump(array_unique($arr)); // or foreach($news as $n) var_dump($n->tag->each('yourPropertyOfSelectExtOption')); // all table columns are provided as property except those named with reserved words foreach($news as $n) var_dump($n->tag->each('row')); or simpler $news = $pages->find("template=news_detail"); var_dump($selected->each('tag.label')); // return multiple array of each label of field 'tag' of each page in the PageArray
    1 point
  30. hi, there buddy ;-) it would be nice if you post your nice modules for all.
    1 point
  31. The source is on GitHub, knock yourself out https://github.com/mindplay-dk/SystemMigrations
    1 point
×
×
  • Create New...