Leaderboard
Popular Content
Showing content with the highest reputation on 12/02/2012 in all areas
-
Do you hate dislike TinyMCE and heart Markdown? Or Textile? Or HTML? Do you wish there was better way to create content than textarea? Well there is! Content creation oriented, syntax highlighted and easy on the eyes, that is this new plugin I made. And I know you'll love it! And did I mention it supports HTML, Markdown and Textile? Download/fork/star here: GitHub PW Modules Your local modules manager Features Syntax highlight your text, for easier preparation of content Nice light, readable theme Supports Textile, Markdown & HTML Auto selects mode, based on field's textformatters (last found is used) Works with multiple fields on page, each with different settings Features inspired by iA writer Blue Cursor Focus mode We are still kind-of in beta, so please, test your browsers and let me know… Thank you! <3 PW9 points
-
Hi, I wrote a new module this evening: Template Editor This module adds the possibility to edit and rename template files directly from the backend. Requirement: It's important to have this module installed and PW 2.2 running. Download: http://modules.proce...emplate-editor/3 points
-
Finally I took the big step of creating a bookmarks folder only for bookmarking threads or individual post from the forum. If someone wants to follow maybe we can have a nice repository of code in some months by joining everything. Just an idea2 points
-
Make sure you are logged out too. Pages aren't cached for you when you are logged in. There are other factors that can disable the cache, but most under the template settings. And of course a page is only cached once the cache has been generated, so if you are hitting a bunch of pages for the first time in an hour then it's likely none of them were cached. In general, cache is only used for the 'guest' user. I am working on a so called super cache module that bypasses both MySQL and PHP. It uses the apache rewrite engine to pull cached urls directly from static files.2 points
-
Just a very minor and not-at-all-important suggestion, but what about a bit of OS sniffing, and showing Mac users screenshots with Mac browser chrome, Windows chrome for Windows users, etc?2 points
-
I'm new to PW and wanted to say thanks for such an awesome, elegant tool. I'm really looking forward to working with it. I hope to be able to help out and contribute some day. Really, though. I'm just blown away. Great job on your own site as well.2 points
-
Matthew .... PLEASE rephrase that!! It is the only neck of which I am currently in possession! (Just to prove that I can write proper when I want to) I am slowly collecting together these tips, by the way. I will make them public at some point - a nicely disorganised jumble of PW bits! Joss2 points
-
A good way of knowing what is possible to do in pw is to keep in mind that the system was built with the exact same tools that are available to us. And that, as on our own websites, everything is a page2 points
-
Yep Joss, Just go ahead and create new fields as normal. I normally create "first_name" and "second_name" then you can add those fields to the "user" template. To see "user" template just do as Nico says. Then output like normal fields: echo "<h3>Hey! $user->first_name $user->last_name</h3>"; You can then attach any type of fields to the user (photos etc)2 points
-
A user just a (special) page. You could do add child pages, or images xtra fields, what you wish. Beware that that you can't move or delete a user page as you would delete a page.2 points
-
Yes it is. You have to got to "setup->templates->filters (the box at the top)->show system templates" and click on yes. Then you will find "user" in the template list.2 points
-
So, had same free time: https://github.com/NicoKnoll/TemplateEditor (just beta)2 points
-
Greetings, I'm curious about how those of us go back a ways have some very old built-in habits, tendencies, practices, etc., and how this affects you when coding. Brief Personal History: I learned "programming" on TRS-80s in 1980, when my forward-thinking 8th-grade science teacher obtained a bunch of them for our class. He also ran an after-school workshop on learning computer programming (BASIC), which I attended with great excitement. I also did my first programming in the early to mid-1980s using Apple IIs for my uncle, an accountant who wanted what we'd today call "apps" to automate calculations. That same uncle bought me a Timex Sinclair for Christmas in 1982, which I still own. I'm happy I was introduced to coding so early in life. But sometimes, I find that the ideas from those days stick, perhaps too much. Just one example... When I learned BASIC (don't laugh), a bit of code with conditionals looked something like this: ... 30 IF Y$ = "Y" OR Y$ = "y" THEN GOTO 115 ... 115 PRINT "Thanks man!" But today, in PHP, to test for a condition, it works like this: if($page->images) { /* Do something here that would be true if there are images in the "images" field */ } else /* Do something here that would be true if there are no images in the "images" field */ } In the above example, a lot of the PHP conditional statement is assumed. In the old days, we had to spell it out and send someone to a particular spot in the code. Obviously, no one in his/her right mind would want to go back to the old days! But because of ingrained ideas, I find myself mentally expecting the "then" in the initial conditional statement when it's not necessary. It's a simple thing, but it causes moments of pause. There are lots of other examples beyond simple conditionals. Just wondering, does anyone else here with a similar history feel the same effects? Thanks, Matthew1 point
-
Hi, Here is another processwire powered site, completed recently. http://www.kapelis.com/ the way this is setup would not have been possible without processwire, which has made it easy and accessible for the client to update all aspects of the site without having to code or use a wysiwyg... -marc1 point
-
Yep, there is a problem when gmap is hidden. This happened to me on the frontend of a site where I was using jqueryUi to show the map, and apparently it's very common with lightboxes. The problem is that, if you are using display: none; to hide the map, it first gets rendered with 0px size, and this is what jquery's .hide() uses. The solution would be to use visibility:hidden; or position it absolutely outside of the screen instead. But I think this wouldn't be easy to do in the admin, since it's using jqueryUi...1 point
-
Will do Nico after the flash copy/paste has been introduced.1 point
-
I remember someone asking fo such a feature, but the thing is it isn't an autocomplete, suggest feature but a ajax search showing results that's just a html list or whatever the developer put's inside the results. The input text autocomplete default feature in browsers have to be disabled to the ajax search to no get in conflict. You can browse the results using tab, that's the standard behavior. Also the arrow keys are used to scroll in some browsers or even all I think, it is not a real problem but have to keep in mind. Maybe I could come up with something that's cycles links in a html div, but I'm not to keen to do it. For the close, there'a a close link, and maybe I could try adding esc key support for closing. I think I'll have a look at how it could be implemented.1 point
-
I am really pleased I have solved this particular problem! Flexslider has an out-of-the-box issue when using the "fade" animation type. Basically, there is a huge gap before the animation gets going - once it starts it is fine. I have searched long and hard to find a solution and keep coming up with people saying you should set .slides li { display:none} That does work - unless you have captions, in which case they vanish completely. After staring at the live code with Chrome dev tools I noticed the problem is that if the show starts on the first slide, it has to wait for all the hidden slides to go through their animations before the loop comes back to the beginning and the visual show starts - hence the gap. However, if in the initialisation script for flexslider set startAt: to the last slide (if you have 4 slides, set it at 3), then the next slide is the first slide and the problem is solved - PROPERLY. Whoopee! Now, relating that to processwire, and in this case a repeat field with images and captions, all you need to is set up a count. $totalslides = -1; foreach($page->slideshow_repeater as $slideshowrepeater) { $totalslides++ ..... and then insert the result into the initialisation script at the bottom of your template, for instance: <script type="text/javascript" charset="utf-8"> $(document).ready(function() { $('.homeflexslider').flexslider({ selector: ".homeslides > div", initDelay: 0, startAt: <?php echo $totalslides; ?>, animation: "fade" }); }); </script> And there you have it - it all works properly. And I am going to brew a nice hot jug of good Italian coffee to celebrate! Joss1 point
-
Hey Joss, I have a bookmark folder filled with JQuery slideshow plugins, listed in order of preference... Then we have all those articles from Smashing and .net magazine reviewing lists of them. My main criteria for slideshows is that they must... 1. Capture the slide information from a simple HMTL element (an li, img, or DIV) 2. Allow customized index "disks" and pagination 3. Allow the use of any kind of slide content (image, HTML, links, etc) 4. Allow multiple slideshows on a page Thanks, Matthew1 point
-
I store each of my PW projects in separate repos. When it comes to updating the version of PW used for a project, I'm sure there has to be an easy way to merge the master or dev branch of the PW repo into am update branch of the current project's repo. I already added the PW repo as remote source. But as I'm far from being a git pro, I haven't found the right way to do an update appropriately without getting everything messed up. It would be great if one or two of you guys would sketch their approach to updating a PW installation using git and github in a few words.1 point
-
Looks okay to me. You might want to account for other possibilities too, like https, etc. $url = preg_replace('{^.+://}', '', $dealer-website);1 point
-
Thanks onjegolders for the report. I just updated the module to also work in tabs. It had to do that the init script was executed immediately before wiretabs.1 point
-
I think that's a matter of opinion. You could always create two templates which are allowed to be children of its parent. Eg: project_brief and project_full then let the client select which they want for each "project". Or, you could provide the client with checkboxes to determine if they want to show/hide certain elements on each page. Eg: if ($page->show_breadcrumbs == 1) { include("./breadcrumbs.inc"); } Ultimately PW gives you ultimate control over what you (the developer/designer) want to do with the site. You can go many ways about displaying the content. "views" using urlSegment, different templates or even giving the client choices by way of checkboxes. There are probably many more too. EDIT: Perhaps you can give us an example of what you are trying to achieve ADB and I'm sure there's some really easy ways to achieve it. I've yet to find something in PW that isn't easy to implement or that someone already hasn't provided code for.1 point
-
v0.9.7 released - I added version check (it's easier than making it work on old PW installs )1 point
-
Glad you found it. Eventually I think we'll have to add a 'default sort' option for repeaters, so that they automatically sort by some field present in the repeater.1 point
-
Once you've got your form, I think it'll be fairly easy to develop this. But your date fields are the only thing that's going to need a little extra work. Since you are asking for just month and year (no day) you'll want to qualify that to the beginning of the first month and the end of the second month. Finding the beginning of the first month is easy since all months start at day 1. There are various ways to find the end of the second month, but there's one way in my example below. Here's how I might perform the query from the API side (written in the browser so may contain typos): // where we will store our $pages->find selector $selector = array(); // add the search query if present if($input->get->search) { $search = $sanitizer->selectorValue($input->get->search); $selector[] = "title|body~=$search"; } if($input->get->yearFrom && $input->get->monthFrom) { // construct date like 2012-12-02 and convert to timestamp $dateFrom = strtotime("{$input->get->yearFrom}-{$input->get->monthFrom}-01 00:00:00"); if($dateFrom) $selector[] = "date>=$dateFrom"; } if($input->get->yearTo && $input->get->monthTo) { // do the same for month-to, but find the beginning $dateTo = strtotime("{$input->get->yearTo}-{$input->get->monthTo}-01 00:00:00"); // now find the end of dateTo month by adding 1 month and subtracting 1 second if($dateTo) $dateTo = strtotime("+1 MONTH", $dateTo) - 1; if($dateTo) $selector[] = "date<=$dateTo"; } // determine and validate the max records to show $limit = (int) $input->get->limit; if($limit > 50 || $limit < 1) $limit = 10; $selector[] = "limit=$limit"; // specify the template we are limiting the search to $selector[] = "template=article"; if(count($selector)) { // perform the search $selectorString = implode(', ', $selector); $articles = $pages->find($selectorString); echo "<h2>Found " . $articles->getTotal() . " articles matching your query.</h2>"; echo $articles->render(); // or however you want to output them } else { echo "<p>No search specified.</p>"; }1 point
-
As the complete newbie here, I haven't had a chance to take anything from previous projects yet. However, the test projects I am developing are very much aimed at doing exactly that - mostly from the template point of view. So I am trying to split the markup up a bit by using inc files. For instance, I have a very small file that displays fields for a news post, another that will be an index for the same news, another that is a bootstrap collapse widget for the same news - all grouped together. Next time I do a site that needs a news, I will create the same named fields just reuse these mini-templates and include them into whatever main templates I am creating. It does make me think of the idea of "Sub Profiles" These would be addon bits that could be put onto an existing profile rather than replace it. I haven't thought this through properly (actually, I have literally only just thought of it). Each one would be a template (or incs, maybe), associated fields and their DB tables and would just add some premade functionality that would then need to be incorporated into a system by the designer. I don't know ... there maybe something there.1 point
-
Well, that woke me up! Yep, very nice. The great thing about Processwire is that it is different, clever and really really modern. The bad thing is that the website used to make it look old fashioned. The new site addresses that - which is a good thing. (and it is responsive) I hope the standard install of 2.3 will look as fresh and bubbly - all good marketing stuff this! (And PW deserves some good marketing stuff) Joss1 point
-
Okay, not sure if this is a question or a wish list item, or maybe even both! I want to display the authors name next to an article, but of course this is just displaying the username which is not pretty. Is there a way of adding additional fields to user profiles so that I can display better names or preferred names? Joss1 point
-
Hello Joss, Once again, we align! I was wanting the very same thing. It's great to know that users can be handled so nicely in ProcessWire. Thanks, Matthew PS: Thanks Joss for putting your newbie neck on the line so I didn't have to put mine out this time (I'm doing that in other forum threads).1 point
-
Haven't read that well. Ok, this is kinda hard to make it short, there's many way to archive this in different levels. Are those users public-registered users or trusted users you give explicit accounts? Just to give the most restricted, just front-end users: Create appropriate roles or permissions. Like a "frontend_editor" Role and only add page view permission. You give only guest and this new role to the users. When they login via backend they won't see anything and get redirected to front-page. Voila. In your templates and modules you check for the Role the user if($user->hasRole("frontend_editor")){ // do stuff } else { // do other stuff } Edit: To give access to only certain field to edit. Well since you only have a front-end user with no access to anything, you control it via code in template. And my examples above shows a "$ignore_fields" array you could choose to ecxlude certain fields as you create the form this is simple. But anything possible in PW. There's a module that enables per field limit access by Ryan http://modules.proce...eld-permission/ might be something to try. Don't know if it works with the form rendering method here. To restrict certain users to pages. Since need to know which pages a user has you can add a page field to the user template, so you can add pages a user can edit by editing it's profile. Then you can check in your front-end code if a page he wants to edit is in his added pages. For adding pages you'll have to have to parent page field or something. // does the page field contain the page he wants to edit? if($user->editable_pages->has($editpage)){ // do edit form stuff } Or just use one page that is the parent of a branch he can "work". Use this to redirect the user to his page and do stuff and always check if the user has the rights when you do something. /Just to give some examples1 point
-
Not sure what in detail you need, but got some example code mainly taken from the Template Form Processor render a pages form to edit in front-end. https://gist.github.com/somatonic/5011926#file-from-php Now you need to include scripts and css needed. Note this $config stuff is only populated after you generated the form in API. In the head.inc you could include script (taken from the admin template default.php and modified a little). Also you would maybe need the inputfields.css found in the admin templates folder. This somehwhere in the <head> Moved code to gist.github.com for convenience.. https://gist.github.com/somatonic/5011926#file-head-php This will give you the basic things needed, I have not tested all fields, but file uploads and date picker or even custom color picker etc works fine.1 point
-
Hi Christoph, Your english is very good, don't worry. Not sure I understand exactly what you want to do but serving "views" is relatively easy to achieve by allowing urlSegments in the template settings. You can then serve different views dependent on the urlSegment (which you will append to your "a" tags). Eg: if ($input->urlSegment1 == "category") { include("./categories.inc"); } You can then create categories.inc where you will test for the urlSegment2 and show the relevant category. So if your link goes to "blog/category/news", your template would help you output just the pages linked to the "news" category. // categories.inc <?php $name = $sanitizer->pageName($input->urlSegment2); $category = $pages->find("template=category, name=$name"); $articles = $pages->find("template=article, category=$category"); ?> Hope this makes sense, if not I can try and show you in more detail1 point
-
maybe something like this: $yourUrlField = str_replace('http://', '', $page->yourUrlField); echo $yourUrlField;1 point
-
You can also take a different approach to soma's suggestion. Instead of changing title and headline, just create a new field "nav" for each page and change this in your code: <ul id='topnav'><?php $homepage = $pages->get("/"); $children = $homepage->children; $children->prepend($homepage); foreach($children as $child) { $class = $child === $page->rootParent ? " class='on'" : ''; $nav = $child->nav ? $child->nav : $child->title; echo "<li><a$class href='{$child->url}'>{$nav}</a></li>"; } ?></ul> Now you can choose the nav text for any page, and if left blank, the title will be used1 point
-
The overall look is very bright and contemporary, without going too far from the original. Now all we need is for the forum to match!1 point
-
Thank guys for the feedback! Very appreciated. As for the claim, it is still there on: http://processwire.com/about/1 point
-
I never liked tinyMCE. Always angry with the code it creates or corrupts. So I was far from a big fan. Then I discovered PW, was very happy with the markdown it provides. But then after a while I discovered how well tinyMCE is integrated, how well it was configured. PW has changed the way I think of tinyMCE. It does function very well. The way i think to go for WYSIWYG editors don't drop tinyMCE till PW drops support for older browsers. Or don't drop it at all. Maybe we need a $config->onlyHtml5Browsers = true; ( or something ) That could make some room for third party WYSIWYG alternatives based on new standards.1 point
-
Conveniently CKeditor 4 just came out on the 27th (and with many huge improvements). I started playing around with creating a Module the very next night, I've so far setup some basic config options and got the basics working but a quick look at the custom PW Image and Link plugins for TinyMCE had my head spinning. Maybe if Ryan could shed some light on how these operate or the requirements involved I could make some more progress. I'd really love to see CKeditor replace TinyMCE, even if only for the improved interface.1 point
-
And there my first real module: https://github.com/arjenblokzijl/ProcessPagePathCopy The origin A client needed to copy a lot of handpicked pages. You can do it using "view" and rightclick, but I thaught a single click might be a bit easier. So I wrote (thanks to Soma) this little module which adds a "copy path" action. You can also select a prefix or select which template(s) the actions should be applied to. The client can use command/ctrl + c, switch to his e-mail, do command/ctrl - v, switch back press enter to continue to the next. I need to implement a flash based solution to make the last step redundant. Hopefully that is done the next couple of days.1 point
-
Really? I sometimes need one of those .... Edit: Well, at least it is related. In real life I was a sound engineer and dubbing mixer for 25 years (with lots of copywriting and padvertisign thrown in) and been a composer for the last 10 - I do things like this: https://www.youtube.com/watch?v=ISaXZ5j6gv8&list=PLF9DEA78045F0988C&index=6&feature=plcp But I don't get a lot of call for commissioned music on websites. Pity, audio is really rubbish on the internet - very underused.1 point
-
1 point
-
hehe Thanks Diogo I will go through it properly at some point soon - I have a lot of other stuff to learn too, like some basic php! I have bookmarked this post, however, to help me. The problem is that I am not a developer king, I am a cut and paste jester, which means I somehow manage to get things working, but more by luck than judgement. I spend a lot of time being surprised when things actually work! I get there eventually... sometimes! Joss1 point
-
Hi Diogo Yes, I had already looked at that and decided going out and getting drunk was the next move. Once I feel more secure with the system, I will creep up behind it and have another go ..... Joss1 point
-
1 point
-
The only way I see to do this in a find with a selector, is to do something like this: $up_pages = $pages->find("status=unpublished"); $sel = ''; foreach($up_pages as $p){ $sel .= ",has_parent!=$p->id"; } $pa = $pages->find("template=basic-page$sel"); foreach($pa as $p){ echo "<p>page: $p->title $p->url</p>"; }1 point
-
Just a little update. I discovered a company here in Vancouver that has really integrated/meshed together the template/IDX concept into monthly packages specifically for realtors. Check it out at www.realtyninja.com. Crunchbase did an article on them here http://www.crunchbase.com/company/realtyninja Cheers for now, Grant1 point
-
From what I can gather from the video in my previous post, no data seems to be stored locally - it all comes from these central feeds on the fly which is interesting, but if it were me I'd love to see stats like who clicked through on which property and I assume there's data on which property belongs to which real estate company. The whole point seems to be that there's a central feed of data from various Estate Agents (to use the UK term ) and as an agent yourself you get paid commission somehow from listing other agent's data. I can't wrap my head around it just now but it's getting late so it might all click tomorrow, but if there's no local stored data and we're talking about pulling in data from an external source and simply formatting it against a template then this is ridiculously easy and technically you wouldn't need anything as fancy as a CMS even since your own properties would be listed on this central feed (IDX if I'm using the correct acoronym) anyway Of course the advantage of using a CMS like ProcessWire for the rest of your site is obvious, but pulling in these feeds and not storing anything locally means you don't get the benefit of the PW API to easily manipulate the data - you're back to basic PHP. That's not to say that you couldn't create something that lets you manipulate the data in as easy a way as the PW API - I'm sure I saw an example of a module that added on API functionality but can't find the link - it's just that I'm not sure how to do if off-hand. It would certainly be neat to be able to have a module parse this external data and allow you to do something like this in the property list template: <?php foreach ($properties as $property) { echo "<p>Address: $property->address</p>"; echo "<p>Price: $property->price</p>"; echo "<p>" . $property->images->first()->url . "</p>"; } It's easy enough to do this in normal PHP, but in an ideal world the module would present a lovely PW style way of accessing the data The ideal module would allow you to set config settings to the relevant feed URL (assuming all the feeds are supposed to have the same structure) and set up the templates and pages for search results, property details etc. My only worry with this sort of thing is we're in the territory of commercial modules I think - the folks behind the module in the video I linked to make a reasonable amount of money every month by selling that module and whilst it would be nice to blow open whole markets with free modules for all I'm a believer in trying to make a profit from modules like this where there's a huge market (dozens of estate agents in every town/city around the world) and I assume estate agents turn a decent enough profit if they're shifting property at a reasonable rate?1 point
-
No doubt if something can be built in WordPress, it can be built a whole lot better and more easily in ProcessWire. That's my opinion anyway. But as to the best approach here, I think a lot depends on these services that power all the data. I don't have enough background on those services and data to make informed statements about best strategies here. But I think there is at least a good chance that such a setup might be built out most easily as a site profile.1 point
-
I agree, though also think it's a delicate balance. I'd like people to perceive ProcessWire as something like Google (in terms of simplicity) – they can start using it without really having to know anything. They can discover the depth of it as their needs grow. If the depth is out in front, they might be overwhelmed. So I like to keep lots of surface simplicity and let PW grow with them. Most of what you use PHP for in a template is no different than how you would use some other template engine, except in syntax. So something like: <p>$somevar</p> is probably not a good example because there is no logic there, it's just pure output generation. You have to connect your variable to the markup at some point, and it doesn't get any simpler than that. I do think the point is valid when you get down into code that isn't geared towards output generation. But the nature of PW's API is that all the data is put at your fingertips so your template code can focus on output generation. The logic (or lack of it) that one uses in PHP at this level isn't really any different than that provided by something like Smarty, EE or another template engine. What is different is that PW puts all of the site's data at close reach, rather than some specific subset of it. That kind of resembles working in Javascript with the DOM. As you start working at a larger scale, using some discipline in how you do things can help you in the long run. I'm not talking so much about whether something is in a <p> or <li> tag, but about stuff that would create major obstacles if you wanted to completely re-skin your site tomorrow. An example of something that does go beyond output generation a little is a search engine. This is one of the reasons why I like the approaches we've been talking about, because it does a good job of isolating logic where it matters. This particular example doesn't have any real logic of the sort I'm thinking of, but pretend for a moment that it was a much bigger/more complex search engine: search.php <?php $q = $sanitizer->selectorValue($input->post->q); $results = $pages->find("title|body|sidebar*=$q"); $page->body .= $results->render(); include("./main.php"); Or using something like your guys method, where a separate view file generates output separately: search.php <?php $q = $sanitizer->selectorValue($input->post->q); $page->searchResults = $pages->find("title|body|sidebar*=$q"); /* then the output file /includes/search.inc knows to output results from $page->searchResults */ include("./main.php"); Another thing I've found that works well is to put reusable output generation in modules and attach it to PageArrays, not unlike $results->render(). For example, on those villa sites, I have a PageArray::renderVillas hook that can be called anywhere in the site and it always renders villas the same way, provides a sort select at the top, and knows to handle pagination. Likewise, I added a Pages::villas() hook that only finds villas and automatically plugins in the proper limit=n for consistent site-wide pagination. So if I needed to re-skin the site tomorrow, I could update all the site's villa lists in one shot (and there are hundreds of them). As time goes on, I think it'll be good for us to document best practices for large scale use. Like with PHP itself, I'm glad PW doesn't force us into one way of doing things. But I think it'll be helpful to lots of others if we outline what we've found helps to maximize scalability, longevity, etc. At the same time, when it comes to teaching people how to use ProcessWire with examples, I think some of these best practices can confuse the message. I wouldn't suggest that someone learning ProcessWire should use it in pure MVC mode until that is appropriate for their scale and need. It's only when you go bigger and more complex that your template code starts to become something more than a 'view', and it's at that point where you need to start considering the long term. I think this is only worthwhile if you are dealing with some other group of people that is creating the output files, and that group refuses to get anywhere near PHP. Ultimately they just need to be told that there's no difference between <?=$somevar?> and {{$somevar}} except for a lot of unnecessary overhead for the {{$somevar}} version. More here: http://processwire.com/api/why-php-syntax/ It would be easy possible within PW to create markup-generating type of modules. Not sure If that should be done, as It's a little against PW's philosophie. Markup generating modules are fine I think, but I just don't want PW's core to generate any markup. I figure it should always be markup neutral. But markup generating modules can be very handy. Though my preference is for markup generating modules to provide options for customizing that markup. Me too. Though when providing these as something beyond a basic example, I think it invites an audience that is interested in turn-key solutions and not web development. Such things require good support. Thats why I think there is a good fit for paid solutions in this (like Maruchan brought up).1 point