Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 05/10/2013 in Posts

  1. InlineEditor 0.0.3 A simple, inline editor that allows you to edit text based content directly in pages themselves. Only use this to experiment. Please do NOT use this on live sites. 0.0.3 Updates Refactored process module Editor now shows result sent by server rather than a generic message New in 0.0.2 Editing repeaters work (actually always did from the beginning) All editor bar colours are now configurable through the admin panel All editable areas are now given a dashed border Few other fixes! Module page: http://modules.processwire.com/modules/inline-editor/ GitHub page: https://github.com/Sinmok/InlineEditor-for-ProcessWire Credits: Big thank you to apeisa for Fredi - whos Module inspired me to make this. It also provided a solid foundation on how to make my own module Ryan - For the whole CMS and the HelloWorld module which taught me how to hook on to page::render! Screenshots:
    5 points
  2. FYI, this is still happening - made good progress on capturing and repeating changes to Templates today. I expect this will take a while though, as this is not quick and simple by any means - this is still a spare time project, and I have very little time at the moment...
    3 points
  3. Especially running these actions without supervision could lead to even worse results, so I wouldn't suggest it (or, at least, you should do it first with some test data and generate thorough report of what's changed.) Don't really know anything about spell checking tools, but I'd expect couple of those to be pop up once you Google a bit. PHP has some native features for this (but not sure how commonly installed those are) and apparently there are various custom methods available too. You'll probably also have to split field data to single words and actually recognize which items resemble proper words. Anyway, API part would be quite simple, something along these lines: foreach (wire('pages')->find('template!=admin') as $p) { foreach ($p->template->fields as $f) { // include fieldtypes you want to check (or check for $f->name == "body" if you prefer that) if (in_array($f->type, array('FieldtypePageTitle', 'FieldtypeText', 'FieldtypeTextarea'))) { $original = $p->$f; // do some magic here, such as this: $p->$f = preg_replace('/. [ ]+/', '. ', $p->$f); // some logging would be nice: if ($p->isChanged($f)) { echo "{$p->url} {$f->name} changed: {$original} => {$p->$f}\n\n"; } } if ($p->isChanged()) $p->save(); } } What could be somewhat problematic are fields with HTML in them..
    3 points
  4. One thing you could do would be to use PhpMyAdmin (or mysqldump) to export the whole database (or just the relevant field_[name] text field tables) to an SQL/text file. Load it in a quality editor that won't mess it up (like BBEdit/TextWrangler), and let it run a spellcheck. It should red underline everything it thinks is misspelled. It will be simpler to make manual corrections in this one file, and then re-import the whole thing, than to go through it online. As for space fixing, I wouldn't worry about it. Assuming they aren't non-breaking space characters, they will get collapsed down to 1 space in HTML either way. So it doesn't really matter how many spaces one uses after a sentence, because it'll always be displayed as one.
    2 points
  5. Be careful not to pass values from $input directly into a selector. They would need to be filtered before going into the selector. // convert to unix timestamp then back to string, just to ensure it's valid (this is just one way) $date = date('Y-m-d', strtotime($input->post->date)); // sanitize name to be a pageName $name = $sanitizer->pageName($input->post->name); if($pages->get("parent.name=$date, name=$name, template=event")->id) { /* set error to 1 */ }
    2 points
  6. Hey Mike, I'll do it. But I'm sure you are aware that a discussion like that is going to become rather messy pretty quickly! Thanks, Matthew EDIT: OK, I posted! It's actually easy for me to post strongly positive statements about ProcessWire, since everything that's great about it is on my mind almost every day...
    2 points
  7. Good idea I also have need for it, and fun to make module so there you go (not exactly easy): A first version of ImageMinSize Adds a min dimension setting (under Input tab) to image fields. If requirements doesn't meet it throws error and deletes images. To have it meet exact dimension, you can simply set min and max dimensions to same values. Edit: The module has now its home http://processwire.com/talk/topic/4091-imageminsize/
    2 points
  8. Hi all! I have created this new module that improve the current search engine on PW: https://github.com/USSliberty/Processwire-site-indexer (Beta version) The main idea is to create an hidden field that store keywords (separated by space). The keywords are generated automatically from all text fields in the page, plus PDFs and DOCs files. So if you create new text fields you can forget to add they on Search Page Module. The only thing to do after install, is to change the list of fields in Search Page (see attachment). In fact you need to search only in "indexer" field. NOTE 1: At this time the module index only when you save the page. In the next week maybe i will add the complete-site re-index. NOTE 2: The files are indexed with 2 Unix packages (poppler-utils & wv). I have tried without success with pure PHP classes, but if know a class that works fine i can add it into module. ADB
    1 point
  9. Create custom admin pages easily without having to build a Process Module especially for that. ☞ This module makes it easy to create simple admin pages but you can also create them in much more powerfull way without the need of a module. Have a look at this post written by Bernhard Baumrock to know how it's done https://processwire.com/blog/posts/building-custom-admin-pages-with-process-modules/ ------- I just updated the module, I kind of merged the two versions and now it works with both stable and dev versions of PW. Only difference is that with the stable version you still need to create the child pages and with dev version that is not needed. The instructions are on Github. Enjoy ---- Download or clone from Github https://github.com/ocorreiododiogo/pw-admin-custom-pages Module page is here http://modules.processwire.com/modules/process-admin-custom-pages/
    1 point
  10. A very simple tip, but that might be useful for someone that didn't think of it... This is what I usually do if I want to change something on a live site. if($user->name!='diogo'){ // live code }else{ // my new code } Like this I'm the only one that sees the changes. More examples: // test new javascript. do the same for styles <?php if ($user->name!='diogo'){?> <script src="<?php echo $config->urls->templates?>scripts/main.js"></script> <?php }else{?> <script src="<?php echo $config->urls->templates?>scripts/main-dev.js"></script> <?php }?> // test new head file if($user->name!='diogo'){ include(head.inc); }else{ include(head-dev.inc): } and so on... edit: corrected the first block by Nik's suggestion
    1 point
  11. Page Link Abstractor module for ProcessWire 2 Plugin module that lets you move pages in your site without worry of ever breaking static links on other pages. Download at: https://github.com/ryancramerdesign/PW2-PageLinkAbstractor What it does Converts links in textarea/rich-text fields to an abstract format for storage, and converts them back at runtime. This means that if you move a page and another page is linking to it, the link won't be broken. It also means you can move your site from subdirectory to root (or the opposite) and not break links you may have created in your textarea fields. This applies to any kind of links: pages, files, images, etc. This module will also notify you when you edit a page that has a link to a page that doesn't exist or is in the trash. This module has been tested with ProcessWire 2.1 but should also work with 2.0. Since this module has not yet had a lot of testing, it should be considered "beta" and use is at your own risk. Please let me know of any issues or bugs you run into. How to install 1. Download the PageLinkAbstractor.module file from https://github.com/ryancramerdesign/PW2-PageLinkAbstractor and place it in: /site/modules/ 2. In the admin control panel, go to Modules. At the bottom of the screen, click the "Check for New Modules" button. 3. Now scroll to the PageLinkAbstractor module and click "Install". 4. Edit any of your textarea fields in Setup > Fields. You'll see a new configuration option to enable this module for that field. How it works This is a technical explanation for how this module works for those that are interested. Reading this is not required in order to use this module, but it may help you to use it more effectively. When you save a page that has a textarea field with this module enabled, it will look for URLs in HTML attributes by looking for an equals sign followed by a URL. It replaces instances of your site's root URL with a special tag: {~root_url} Next it checks to see if any of the URLs it found can be loaded as pages in your site. If so, it replaces those URLs with this special tag: {~page_123_url} where "123" is the Page's ID. When the page is loaded, ProcessWire does the opposite and converts those special tags back to their URLs. Because the URLs were abstracted to tags that are generated at runtime, when a page (or a site) is moved, no links are broken. Note that this module only converts URLs to tags when you save a page, so it only affects pages saved after the module is installed. Where to use it This would be most useful on your main 'body' field that uses a rich text editor (like TinyMCE). Where not to use it There is some overhead in using this module that will be insignificant if you use it carefully. Here are a few instances to avoid using it: Avoid use on fields that have the 'autojoin' option on, unless your site doesn't load lots of pages in a given request. Don't use on textarea fields that can contain anonymous (guest) user input. Avoid use on fields that aren't likely to contain links to local site pages in HTML markup. No need to have this module parsing things unnecessarily. Avoid use on fields where you think you might disable it later. Once disabled, the abstract tags representing the URLs will still be in place. If the module is disabled, those tags will no longer be converted to URLs are runtime. You would have to correct them manually by editing the page. Side benefit The tags that this module abstracts to are intentionally fulltext indexable, so you can perform searches for these tags. This means that you can find all pages linking to another by searching for it (minus the brackets and "~"). For example: $links = $pages->find("body~=page_123_url"); That would return all [viewable and visible] pages linking to page ID 123. Please note In order to convert URLs for pages, this module needs to load those pages in order to obtain their URL. If you are linking to a hundred pages in your 'body' field, you should expect that it may slow down the page 'load' and page 'save' time for pages containing lots of links. This module doesn't yet abstract local URLs that have a schema/protocol and domain in it. It just works with path-type links like /path/to/page/ and not http://domain.com/path/to/page/. This module hasn't yet been tested with migrating a site from subdirectory to root, but I will be testing this soon.
    1 point
  12. Sorry I'm a little behind with messages here, I'll be caught up by mid week. But I've got a good excuse. Yesterday Karena Savannah Cramer was born. She is our 2nd daughter (Hanna Ryan, age 3 is our first). We will all be coming home from the hospital hopefully tomorrow.
    1 point
  13. Hi, i had this problem and it is related with bugged blowfish in PHP older than 5.3.7. So if you generate password on newer PHP than 5.3.7 and move to older PHP you have this problem. Best suggestion is upgrade PHP. I temporary solved it this way.
    1 point
  14. The find() method returns an array of pages, and you can on only check for children in a individual page. If your goal with this selector is to get only one page, use get() instead. $info = $pages->get("title=previous caption winners")->children; But, if all you want is to check if there are children, the shortest method would be: if ($pages->get("title=previous caption winners")->child->id) It gets the first child and checks for it's id edit: nik was faster
    1 point
  15. Thanks. In terms of similarity with Fredi, the main point is that they are both tools for editing content on the front end. Fredi is also an exceptional tool which I still use myself. Choose whatever best meets your requirements! In my opinion, the advantages to both are as follows: InlineEditor Advantages Extremely quick - no buttons to press and nothing special to do. Click an element to edit, click off once you're done. Page auto saves. That's it. This makes it perfect for sites that are mostly text based and for quick editing. You don't need to remember what field corresponds to which element on a site. Just click what you want to edit! Know exactly how your page will look before it is even saved - no nasty surprises! Utilizes modern technologies in browsers Fredi Advantages Works with all fields (I think?) Much, much better tested Literally pulls in the back-end editor to the front end in an iframe, making the save result fool proof Doesn't require the jQuery library Edit more than one field per-submit request Has a cooler and easier to remember name
    1 point
  16. I've always happily used VI (VIM) and always will. But I found a way to make the newest PHPStorm look and behave like VIM, so that's what I'm slowly adapting to. So far I like it, it's a fairly impressive piece of software. Lets me still be in VIM (or at least trick me into thinking I am) while giving me all the power of PHPStorm. I was also motivated by their support of open source–they provided the full license for free for ProcessWire development.
    1 point
  17. Greetings, In some sense, this could be one of those situations where a bad situation becomes a good situation. When I look at my workflow, the only Adobe product I use extensively is Fireworks, and therefore I am facing the prospect of maintaining a $600/year Creative Cloud subscription mostly for that application. I have already replaced Photoshop and Illustrator with other applications, and even though I like what I see with Adobe Edge I can't say it's become part of my workflow yet. Finding a proper replacement for Fireworks may be better in the end. Doing a quick round-up, here are a couple of applications I am seeing as possible replacements: Sketch Antetype There is also an application possibility with the person who was one of the leads in Fireworks: Tribaloid Finally, there is this petition to make Fireworks open-source (not sure how successful it will be, but I signed): http://www.change.org/en-GB/petitions/adobe-com-release-adobe-fireworks-to-open-source Thanks, Matthew
    1 point
  18. You can move a page into another parent, but that parent has to be open.
    1 point
  19. Oh dear... please someone delete this thread What a shame, TGIF
    1 point
  20. Marty, this should be good for any structure: $all = $pages->find('template=image, sort=parent, sort=sort'); $prev = ($page !== $all->first()) ? $all->getPrev($page)->url : $all->last()->url; $next = ($page !== $all->last()) ? $all->getNext($page)->url : $all->first()->url;
    1 point
  21. Just for the record: I added Markdown compatibility as a fork of the original plugin: https://github.com/gerritvanaaken/PW2-PageLinkAbstractor
    1 point
  22. Since you are pulling them right out of $_GET (or $input->get), you should filter and sanitize them before doing your http_build_query. $types = array( 'limit' => 0, 'my_string_var' => '', 'my_int_var' => 0, ); $params = array(); foreach($types as $name => $type) { $value = $input->get->$name; if($value === null) continue; // not specified, skip over if(is_string($type)) $params[$name] = $sanitizer->text($value); // sanitize as string else $params[$name] = (int) $value; // sanitizer as int } if(empty($params['limit'])) $params['limit'] = 10; // set a default $new_query_string = http_build_query($params);
    1 point
  23. http://responsivepx.com/?processwire.com (tnx Remy Sharp)
    1 point
  24. Hi Ryan, This seems great! I'll give it a test tomorrow. For the project I'm working on I needed to mimicking some functionality from Basecamp where users can select people to notify of a new comment via checkboxes. In this case it's a list of 5-8 people who have a particular role. In order to make it work, I needed multiple custom messages based on $page->template — while leaving the default message in place for existing pages with comments. I also needed an additional field to store the list of email address that need notified of the comment. I happened across this thread and decided to give it a shot. It was pretty easy to add the additional field to the DB and update the module in a few places. I now have an additional field ($comment->notifications) that is output as a hidden field and populated with email addresses via JS. The security concerns are low since all users are trusted and authenticated. The whole thing is pretty specific to the needs of this project, but (as always) I was shocked at how easy it was to get working.
    1 point
  25. Rickard, I have updated your access so that you can now get to the Form Builder board. Thanks for your order! I think it is okay to go ahead and use 0.2.1, which includes the multi-language features. I am now using it in production and it's been reliable for me. Otherwise, you can always use the old reliable method of cloning the same form into multiple languages too.
    1 point
  26. One way you could do it would be to make the FieldtypeComments::sendNotificationEmail method hookable. If you want to add 3 underscores before that function name (in /wire/modules/Fieldtype/FieldtypeComments.module), I'll make the same change here. From there, it should be hookable. In this case, you'd probably want to override/replace the method completely. To do this, your hook function would populate the $event->replace=true; Using PW 2.3 dev syntax: wire()->addHookBefore('FieldtypeComments::sendNotificationEmail', function(HookEvent $event) { $event->replace = true; $page = $event->arguments(1); $field = $event->arguments(2); $comment = $event->arguments(3); $subject = "New Comment Posted!"; $body = "A new comment was posted to $page->httpUrl by $comment->cite: $comment->text"; mail($field->notificationEmail, $subject, $body); });
    1 point
  27. This gives all you need: http://mqtest.io/ (also build be real superhero - Viljami)
    1 point
  28. Oh no, what I have I done?!
    1 point
  29. As a by the way, for newbies reading post #28 above -> regarding the issues of mass adding/importing images to new or existing PW pages, Ryan's ImportPagesCSV Module can do just that...I wrongly assumed it only does none-file fields http://mods.pw/j
    1 point
  30. Finally grunt-contrib-watch implemented livereload natively so that it can be used without any hassle. Tried previous solutions with the grunt-contrib-livereload in conjunction with regard and connect but could not make it work. Now it works like a charm. http://stackoverflow.com/questions/16371022/how-to-use-grunt-contrib-livereload So yet again, workflow replaced, Guard is yesterday =D
    1 point
  31. Welcome to the Forum Fokke. The default language for the user (english) is being called, to echo the finnish version of those fields you will have to, either change the user language before $user->language = $languages->get("french"), or call the finnish fields directly echo $page->fieldname_finnish Did you see this page? http://processwire.com/api/multi-language-support/multi-language-fields/ Sorry, if I'm assuming that you are doing everything wrong with my answer, but we have to start asking for the basic problems
    1 point
  32. To debug this kind of things the best thing is to look at the markup without javascript to know if the problem is with php or js. Sometimes it's enough to just remove the slideshow class or ID.
    1 point
  33. I just updated the module on Github. I think it's very neat now edit: see first post
    1 point
  34. You beauty diogo! Everything has gone as planned. As I said, Processwire so intuative and easy to use... I have new insight into the repeater field now too. Will use those in a different light. Thanks for your help Wanze and diogo - both invaluable... Regards
    1 point
  35. To all of you who are new to ProcessWire... 1. Welcome. 2. Ask lots of questions, the community here is friendly and very willing to assist. 3. Just start building something—the learning curve isn't nearly as steep as you might think. 4. It's worth it. Once it starts to click you'll never look back.
    1 point
  36. Hey Ryan, Thank you, having access to v0.2.0 has fixed the problem.
    1 point
  37. There is also handy Process modules, that admin uses. See this as a starting point when building your own: https://github.com/ryancramerdesign/ProcessHello
    1 point
  38. Dragan, Welcome to PW! PW is very flexible....your decisions will not be frowned upon but of course advice will be offered, especially when it comes to security . So, as for best practices, my experience is that PW is very flexible and in most cases there is not one way of doing anything. I know, it sounds like a cliche...but seriously, you'll notice this very quickly once you start getting your hands dirty. One thing you will notice is that with PW, you will end up writing less code It's simply that good. Yes; extending PW is in most cases quite easy.... Have a look at this module (WIP). You will get ideas how you can create your CRUD script....It's using DataTables to display PW pages. You can create your own to do something different, e.g. your CRUD stuff using either native SQL or PW's db class. Having worked in the industry that long I don't need to tell you care needs to be exercised if handing a client that much fire power . There is also this new kid on the block...a new take at making custom admin pages... Oh, btw, am ex-MODx as well. There's more in here Enjoy!
    1 point
  39. Midas touch! Congratulations Ryan.
    1 point
  40. @dragan, welcome to the forum! Yes, there is a special field for this task. Have a look here http://processwire.com/videos/page-fieldtype/
    1 point
  41. I'm going to answer from what I remember, so It's possible that I will say something wrong again. But this host is peculiar because they accept any (legal) kind of website, and are heavily attacked by hackers/haters. Because it's a shared host, and knowing that lots's of websites will be under attack, they close all the doors, and that's why they have safe_mode as one of the main components of their environment. To give the possibility to turn off safe_mode for some users, they created the "flex" environment (as opposed to the "fast" environment), that takes other security measures that apparently have great impact on performance. You can see the difference between both here http://php53.nfshost.com/
    1 point
  42. Ok, I think I figured out what causes the issue. Seems that the old PHP 5.2.6 on my production server messes up the encryption/hash functions, so the Password::matches() method does not work as expected (on my local machine I have 5.3.5 ...which is rather old, too, as I just realized ). I'll try to udpate the PHP version and check again.
    1 point
  43. Hi Grays, I have attached a printable Cheatsheet, its laid out on 2 A4 pages. It covers $page, $pages and PageArray. I hope it helps. Ryan pointed out: I'm very new to processwire and I understand where you are coming from. I'm praying for that "AHA!" moment too! When I see encouraging and friendly threads (like this one) I feel like Processwire is worth the time. Good luck processwirecheatsheet.pdf
    1 point
  44. I had a problem here but figured it out, with Somas help
    1 point
  45. .. what hook did you use? ;-)
    1 point
  46. Diogo, Can't wait to test this tomorrow morning. If it does what I think it does, I'll be on the first plane to Portugal to buy you all the beer you can drink.
    1 point
  47. thanks renobird that was exactly what i was looking for. i allso add 'allDay' => false, after 'url' => "./$event->id", // event ID is the url segment and now shows the event start - end time inside calendar
    1 point
  48. http://urbanmotionbeats.info About the site Urbanmotionbeats is a party website featuring facts about events, galleries and a list of DJs. The main goal was to create a site, where they can upload their photos after a party. Processwire was perfect for this: We could make a template with all details about an event, add the image field and were ready to go. Features Processwire with ProCache enabled together with Lazyloaded images for a good page speed Event template with gallery and several text fields Homepage with random images, latest events and some text. Integration of the Facebook Comments and like boxes Responsive/Adaptive Design, because a lot of people will using this from their smartphone Problems We mostly had client problems. How to use the admin backend. Where are the limits of the Backend? How can I do X? Why does Safari on Windows not work with Drag'n'Drop? I've never though about, what would happen if someone uploads 300 pictures from a DSLR with 20MB each (Script Timeout). We've fixed most problems but also learned alot. Overall you can say, Processwire performed well. If our not so tech-savy clients would have to use another more bloated Backend they would be totally helpless. What's next? This site is only the first in a row. Other event "brands" from them will follow with a slightly modified design. We've written a JSON output so we can later combine all events from all sites (4 are planned) together in a portfolio site with a more business focused audience.
    1 point
  49. I don't see an easy option to do that, but with a little module you could on each save of a child page update a date field on the parent. Then sort it by that field. Let us know so we can help you get started.
    1 point
  50. After Ryan's latest incarnation of Blog Profile I wanted to see if I could learn something from there to my own workflow. It turned out very nicely and this seems like a perfect template approach for me. Wanted to share it with you guys. Folder structure under templates folder: templates/markup/ templates/markup/helpers/ templates/markup/layouts/ templates/scripts/ templates/styles/ And it all begins from here: templates/markup/index.php -this is the "complete" html file, it has doctype, head and starting and ending body. There is very little "logic" here, it's more like a container. There is one very important code snippet there though: <?php if ($page->layout) { include("./markup/layouts/{$page->layout}.php"); } else { include("./markup/layouts/default.php"); } ?> Code above goes between header and footer of your site, that will be the main content. I call it layout, but the better name would be "content layout" or "inner layout" or something like that. Then the templates/markup/layouts/ folder will keep at least default.php file, but probably few others, like "threeColumns.php", "frontpage.php", "gallery.php" etc.. you got the idea. Each of the actual pw template files are then purely "controllers" - no actual markup generated there. All markup are done in files inside templates/markup/ folder and it's subfolders. This is how template file templates/home.php on one site I am building right now looks like: <?php // Carousel items $t = new TemplateFile(wire('config')->paths->templates . 'markup/helpers/carousel.php'); $t->set('carouselPages', $page->carousel); $page->masthead = $t->render(); // Tour themes $t = new TemplateFile(wire('config')->paths->templates . 'markup/helpers/items.php'); $t->set('title', "Get inspired from our <strong>tour themes</strong>"); $t->set('items', $page->featured_themes); $t->set('description', $page->themes_description); $t->set('url', $config->urls->root . "themes/"); $t->set('linkTitle', "All themes"); $page->main .= $t->render(); // National parks $t = new TemplateFile(wire('config')->paths->templates . 'markup/helpers/items.php'); $t->set('title', "Seven beautiful <strong>national parks</strong>"); $t->set('items', $page->featured_parks); $t->set('description', $page->parks_description); $t->set('url', $config->urls->root . "national-parks/"); $t->set('linkTitle', "All national parks"); $page->main .= $t->render(); $page->layout = "frontpage"; include("./markup/index.php"); This uses few "helper" markup files from templates/markup/helpers/ folder (namely carousel.php and items.php). Here is the carousel.php for your reference: <?php /* Generates the markup for the frontpage carousel */ if (count($carouselPages) < 1) return; $styles = ''; echo "<div id='carousel'><ul class='rslides'>"; foreach($carouselPages as $key => $p) { echo "<li class='c-item c-item-$key'>"; echo "<img src='".$p->image->getThumb('carousel') ."' alt='' />"; echo "<p>$p->summary</p>"; echo "<a class='button' href='{$p->link->url}'>$p->headline</a>"; echo "</li>"; } echo "</ul></div>"; Then populates the $page->masthead and $page->main properties and then set's the inner layout to "frontpage". That templates/markup/layouts/frontpage.php file is very simple on this site, but could be much more complicated if needed: <div id="masthead"> <?= $page->masthead; ?> </div> <div id="main" class="wrap"> <?= $page->main; ?> </div> Frontpage is rather unique and I could have done all the markup on the frontpage.php file also. But I do want to re-use those "carousel" and "items" components on other places as well. But if I do have totally unique stuff, where I do want to get "quick and dirty" this approach allows it. Then my template file would be something like this: $page->layout = "campaign2012"; include("./markup/index.php"); And then all the markup would be in that templates/markup/layouts/campaign2012.php Blog profile really gave me a good ideas (cleaner folder structure etc) and using TemplateFile class adds nice possibilities. This is of course just a one way to manage your templates, but hopefully someone of you finds this helpful when thinking about how you like to structure this stuff. PS: If you are just getting started with PW, then I recommend using the head and foot includes method from demo install. There is nothing wrong with that method and only more complicated sites starts to benefit from these methods introduces in this topic.
    1 point
×
×
  • Create New...