Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 05/13/2014 in Posts

  1. Hello I've been interested in the Google Street View time machine feature since it was released, and decided to start collecting/documenting scenes that have changed in some interesting way (to me) between the capture dates. Changes It's nothing really fancy - just listing items with images, tags and maps. Posting new things is easy and frictionless, which is good because the process behind getting the images in the first place is the time-consuming part! Modules used include All-in-One Minify, MarkupRSS and MapMarker.
    4 points
  2. http://quilljs.com/ It's all about the API, just like PW
    3 points
  3. ProcessWire ProFields is new product that will soon be available in the ProcessWire store. It consists of 4 really useful new modules: Textareas (Fieldtype + Inputfield) Multiplier (Fieldtype + Inputfield) Table (Fieldtype + Inputfield) AutoLinks (Textformatter) These modules are currently in beta testing, and I'll be posting screencasts to highlight some of the features of each over the next week or so. To start with, here is a screencast for Textareas: This video includes sound (narration) and I recommend viewing it at a larger size than above (preferably full screen), and bump it up to the 720p resolution so that you can see everything in better detail.
    3 points
  4. @pwired this is a very specific need, and needs to be addressed like so. It will never be possible to have formatting compatibility for every software out there, right? As Adrian said, SVG would be an option, but will you have the right fonts for every label, and if so, is it worth the overhead of loading them all? I think in your case, I would have the raw text (not formatted at all, and no layout) and a picture of the label.
    3 points
  5. Things like bullets, bold, italics etc should copy across just fine. A standard paste in TinyMCE preserves these. There is also the Paste from Word option installed by default with CKEditor. In my opinion you don't want line spacing to copy across - you want it to match your sites css line-height. As for columns, that is another case where I don't think it is appropriate to copy across - this should be controlled by your site's markup. I think this is another case where the client needs to be educated that duplicating an exact layout from a Word document is actually not a good thing in most cases - their site would start looking like a jumbled mess and varying layouts very quickly.
    3 points
  6. I don't actually see how your revised find would work, but this will: $id = $this->pages->get("include=all, sort=-id")->id + 1;
    3 points
  7. I do believe a new standard for screencasts has just been set!
    3 points
  8. Add your new domain name to $config->httpHosts() array in your /site/config.php file. That should do the trick. Just for the record, it would also work if you cleared that array entirely, but it's better to keep list of valid domains there. It's a security feature.
    2 points
  9. Hi wilsea, Try adding a trailing slash to the url /processMaths/admin/adduser/ Pw does a redirect if there is no slash, I guess that's why you loose your $_POST data.
    2 points
  10. I agree that these modules are not needed for building great sites with Processwire and do not need to be a part of the core and I would be willing to purchase them if it helps my productivity and workflow and at the same time supports processwire. Though there seems sometimes to be a thin line between what could be added to the core and what could be a paid module. There are some cms and ecommerce systems out there with out mentioning any names that do seem to go over the top whereby every new feature or improvement is added as a paid module / add-on. I hope this won't become the case with Processwire. It could be said that some new features / modules might bring more benefit and funds being part of the core rather than paid modules though this might seem counter intuitive to start with as far as bringing in funds. The reasoning behind this is that the more versatile and great Processwire becomes at the core then the more popular it will become with more people adopting processwire and in turn purchasing more modules like FormBuilder and ProCach and hopefully many more useful modules in the future which could actually create more sales in the long run of those modules hence increased funds. Theoretical of course I have to say that this new module to me seems to be an added feature and improvement to the flexible workings of processwire that attracted me in the first place so personally I would have loved to see it as part of the core with the added benefit of attracting newbies. Of course I am not a newbie now (but still very new compared to others here) and already sold on Processwire and love it more each day and will more than likely be purchasing these plugins in the future and have no problem with that but I do hope that sometime in the future as new paid modules are developed that modules likes these might be moved to the core to help give processwire the status it deserves. Anyway the modules look great and can't wait to see the next screen cast of the other modules.
    2 points
  11. Great solution adrian, I'll try to explain why this is faster than leoric's method and how both work, for people who don't know: $pages->find("include=all"); ... will fetch ALL pages, which means PW is creating objects/instances for every single page that is fetched, which is very expensive. $pages->get("include=all, sort=-id"); ... on the other hand will only fetch ONE page and therefore only create only ONE Page instance for that query. The sort=-id will take care of an descending sort order by id, so the last added page will be returned. What I am wondering though is, why the API is not taking care of that with limit=1 in leoric's example. I am sure there is a reason, I am not familiar with the internals of that process.
    2 points
  12. This looks great, Ryan. Processwire's modularity is, perhaps, its greatest asset. After working in Joomla and Wordpress for years, it's great to have a CMS that is dead-simple when you need it to be, but scales up easily for more complex sites. Keeping the core as clean as possible also makes it easy for people to get in the door, then add functionality as needed. I also find the current module licensing model to be an excellent compromise. Great work! Now, when can I give you my money?
    2 points
  13. return $page->children(); in: Admin / Setup / Fields / Edit Field: name-of-the-field tab: Input (Selectable Pages) use custom PHP code to find selectable pages
    2 points
  14. This module creates a blank dashboard page in your site admin and sets it as default when you login instead of the page list. It came from a need in a few projects where I was creating modules for various user roles to use and I didn't want them to see the page list at all, but needed to display various stats and quick access buttons. For example, if you have a person who is creating invoices or doing other back-office stuff in various other Process modules then as an admin you wouldn't want them to access the page tree anyway, and there are other scenarios where you might want to have a dashboard instead of launching straight into the page list. It also requires (and adds) a permission - "dashboard" - so you can create new roles and assign the dashboard permission to those roles - something you might want to do fairly commonly if you have a lot of admin modules that you want to restrict access to. Editing the template is simple - there is a dashboard.php template file in the /site/modules/ProcessDashboard/ folder (decided to leave it in there to keep it safe, but I might be tempted to move it into /site/templates/ ) as well as .js and .css files ready to add your code to. You can use the API as you usually would to create your dashboard experience. For example, display data based on user roles or even specific users using code like this: if ($user->hasRole('invoices') { echo "Hi staff member $user->name. View invoices to be processed below: ... ..."; } if ($user->name == 'pete') { // Show some super-awesome stuff here } You can also do away with the dashboard.php template file and edit the module directly, putting your code and output in the execute() function (the way most Process modules are written) but I decided to include the separate template file to make it easier for more people to use. This does touch on areas a few other modules have addressed to some degree (like diogo's Custom Admin Pages) but this is designed for one purpose - instant dashboard creation. You can download the module here: http://modules.processwire.com/modules/process-dashboard/ This module also uses code from diogo's ProcessHomeAdmin module so that the default admin page can be overridden.
    1 point
  15. I recently completed a website that had a very large gallery requiring multiple albums (categories) and 100+ images per album with pagination. The solution I developed accomplishes this with just 2 templates (gallery-index and gallery-album) and a single multi-image field for each album, allowing for quick, mass upload of images*. One of the great things about ProcessWire is that you can custom build something like an image gallery with just the tools that the template system and API provide out of the box, without going in search of modules. Once we have the basic templates set up, we will use the excellent FancyBox jQuery script/plugin to add some slick Javascript "lightbox" functionality on top of it. The gallery will still work without FancyBox or with Javascript disabled; it will simply fall back to opening each image in a blank page. So, without further ado... 1. Create a file named gallery-index.php in your site/templates/ folder with the following code. This will be the main page of your gallery. The code simply loops through all of the photo albums that are children of your main gallery page and uses the first image in the album as the cover photo: <? include("./head.inc") ?> <? // Configure thumbnail width/height $thumbWidth = 250; $thumbHeight = 250; // Create an array of the child pages that use the gallery-album template $albums = $page->children('template=gallery-album'); ?> <h2><?= $page->title ?></h2> <div class="gallery"> <ul class="gallery-row row"> <? if(count($albums) > 0) { foreach($albums as $album) { // Grab the first image from the album and create a thumbnail of it $thumb = $album->images->first()->size($thumbWidth, $thumbHeight); ?> <li class="col span4"> <div class="gallery-album photoShadow"> <a href="<?= $album->url ?>" class="gallery-albumThumb" title="<?= $album->title ?>"> <img src="<?= $thumb->url ?>" alt="<?= $thumb->description ?>" /> <h4 class="gallery-albumTitle"><?= $album->title ?></h4> </a> </div><!-- /gallery-album --> </li><!-- /col --> <? } } ?> </ul><!-- /gallery-row --> </div><!-- /gallery --> <? include("./foot.inc") ?> 2. Add the gallery-index template in the ProcessWire admin under Setup->Templates. This template does not require any fields, although you may want to add a body field for outputting additional content to the page. 3. Create a file named gallery-album.php in your site/templates/ folder. This template will be used to both hold and display the images in your albums. Here we will be loading the fancybox plugin as well, so make sure you've downloaded it here: http://fancyapps.com/fancybox/ and uploaded the /fancybox/ folder to your site/templates/scripts/ folder. We are appending the fancybox files to the $config->scripts and $config->styles array before outputting them in our head.inc file so that we're only loading that code on the album pages. So make sure you are outputting those arrays in the <head></head> section of your head.inc file along with your other scripts & styles, like so: <? foreach($config->scripts as $file) { ?><script type="text/javascript" src="<?= $file ?>"></script> <? } ?> <? foreach($config->styles as $file) { ?><link rel="stylesheet" type="text/css" href="<?= $file ?>" /> <? } ?> Please note that you will also have to include jQuery in your head.inc file before your other scripts, if you're not already including it. So here is our gallery-album.php. Notice also that we are calling the FancyBox script and customizing some of its options at the bottom of the file: <? $config->styles->append($config->urls->templates . "scripts/fancybox/jquery.fancybox.css"); $config->styles->append($config->urls->templates . "scripts/fancybox/helpers/jquery.fancybox-thumbs.css?v=1.0.7"); $config->scripts->append($config->urls->templates . "scripts/fancybox/jquery.fancybox.pack.js"); $config->scripts->append($config->urls->templates . "scripts/fancybox/helpers/jquery.fancybox-thumbs.js?v=1.0.7"); // Configure thumbnail width/height & number of photos to display per page $thumbWidth = 150; $thumbHeight = 150; $imagesPerPage = 32; // Make ProcessWire pagination work on the images field (see for full explanation of this) $start = ($input->pageNum - 1) * $imagesPerPage; $total = count($page->images); $images = $page->images->slice($start, $imagesPerPage); // Create a new pageArray to give MarkupPagerNav what it needs $a = new PageArray(); // Add in some generic placeholder pages foreach($images as $unused) $a->add(new Page()); // Tell the PageArray some details it needs for pagination $a->setTotal($total); $a->setLimit($imagesPerPage); $a->setStart($start); include("./head.inc") ?> <?= $a->renderPager() ?> <div class="upOneLevel"><a href="<?= $page->parent->url ?>">← Albums</a></div> <h2><?= $page->title ?></h2> <div class="album"> <ul class="album-row row"> <? if(count($images) > 0) { foreach($images as $image) { $thumb = $image->size($thumbWidth, $thumbHeight); ?> <li class="album-photo darkenOnHover col span3"> <a href="<?= $image->url ?>" rel="fancybox-gallery" class="fancybox" title="<?= $image->description ?>"> <img src="<?= $thumb->url ?>" alt="<?= $thumb->description ?>" /> <!-- Uncomment this line if you want descriptions under images <p class="album-photoDescription"><?= $image->description ?></p>--> </a> </li> <? } } ?> </ul><!-- /album-row --> </div><!-- /album --> <div class="group"><?= $a->renderPager() ?></div> <script type="text/javascript"> $(document).ready(function() { $(".fancybox").fancybox({ prevEffect : 'elastic', nextEffect : 'elastic', loop : false, mouseWheel: true, helpers : { title : { type: 'outside' }, thumbs : { width : 100, height : 60 } } }); }); </script> <? include("./foot.inc") ?> 4. As we did before, add the gallery-album template in the ProcessWire admin. Assign the images field to it, and go into the URLs tab and make sure Page Numbers are allowed. 5. Create a page in the ProcessWire admin for the gallery index using the gallery-index template. You'll probably want to give it a title like "Gallery". 6. Underneath your Gallery page, create child pages that use the gallery-album template, one page for each album you want to create. Name them however you'd like. 7. Go into each album page you created and populate the Images field with your images. Just drag-and-drop. It's as simple as that! If you want to add a description for each image, you can also add it here. If you have more than 32 images (or whatever value you set the $imagesPerPage variable to), the pagination will kick in and split the album into multiple pages. 8. Finally, add in the CSS. The CSS is really up to you, but I'm including a good starting point below. This includes a handy responsive grid system I built for my sites, as well as a .photoShadow class I developed which gives your album covers a cool 3D Polaroid look using pure CSS. /********* Helper Classes **********/ .row:after, .group:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .row { ; /* Remove left gutter */ margin-top: 0; margin-right: 0; margin-bottom: 0; padding: 0; zoom: 1; /* IE7 */ position: relative; } .col { display: block; float:left; margin-left: 2%; /* Gutter size */ margin-top: 0; margin-right: 0; margin-bottom: 0; padding: 0; zoom: 1; width: 95.99999999996%; } .span1 {width: 6.33333333333%;} .span2 {width: 14.66666666666%;} .span3 {width: 22.99999999999%;} .span4 {width: 31.33333333332%;} .span5 {width: 39.66666666665%;} .span6 {width: 47.99999999998%;} .span7 {width: 56.33333333331%;} .span8 {width: 64.66666666664%;} .span9 {width: 72.99999999997%;} .span10 {width: 81.3333333333%;} .span11 {width: 89.66666666663%;} .span12 {width: 97.99999999996%;} .photoShadow { position: relative; border: 5px solid #fff; background: #fff; -moz-box-shadow: 0px 0px 2px #ccc; -o-box-shadow: 0px 0px 2px #ccc; -webkit-box-shadow: 0px 0px 2px #ccc; -ms-box-shadow: 0px 0px 2px #ccc; box-shadow: 0px 0px 2px #ccc; } .photoShadow:before { z-index: -1; content: ""; display: block; position: absolute; width: 104%; height: 16px; bottom: -5%; left: -2%; overflow: hidden; border-radius: 50% 50% 0 0; box-shadow: inset 0px 8px 5px #999; } .darkenOnHover { opacity: .8; -webkit-transition: opacity .2s; -moz-transition: opacity .2s; -ms-transition: opacity .2s; -o-transition: opacity .2s; transition: opacity .2s; } .darkenOnHover:hover { opacity: 1; -webkit-transition: opacity .1s; -moz-transition: opacity .1s; -ms-transition: opacity .1s; -o-transition: opacity .1s; transition: opacity .1s; } /********** Blocks **********/ .gallery { } .gallery-album a:hover { text-decoration: none; } .gallery-albumTitle { font-size: 1.1em; text-align: center; margin: .2em ; } .gallery-album { -webkit-transition: all .2s; -moz-transition: all .2s; -ms-transition: all .2s; -o-transition: all .2s; transition: all .2s; } .gallery-album:hover { -webkit-transition: all .2s; -moz-transition: all .2s; -ms-transition: all .2s; -o-transition: all .2s; transition: all .2s; -webkit-box-shadow: 0 0 3px #555; -moz-box-shadow: 0 0 3px #555; -ms-box-shadow: 0 0 3px #555; -o-box-shadow: 0 0 3px #555; box-shadow: 0 0 3px #555; } .album-photo img { margin-bottom: 6px; border: 1px solid #ddd; } .upOneLevel { font-size: 1.1em; margin-bottom: .4em; } .upOneLevel .icon-circle-arrow-left { font-size: 1.5em; margin-right: .4em; } .upOneLevel a:hover { text-decoration: none; } .MarkupPagerNav { margin: 1em 0; font-family: Arial, sans-serif; float: right; } .MarkupPagerNav li { float: left; list-style: none; margin: 0; } .MarkupPagerNav li a, .MarkupPagerNav li.MarkupPagerNavSeparator { display: block; float: left; padding: 2px 9px; color: #fff; background: #2f4248; margin-left: 3px; font-size: 10px; font-weight: bold; text-transform: uppercase; } .MarkupPagerNav li.MarkupPagerNavOn a, .MarkupPagerNav li a:hover { color: #fff; background: #db1174; text-decoration: none; } .MarkupPagerNav li.MarkupPagerNavSeparator { display: inline; color: #777; background: #d2e4ea; padding-left: 3px; padding-right: 3px; } I think that's it! Just make sure you're including the CSS file in your head.inc inside the <head></head> tags and you should be all set. If you come across any issues trying to implement the above (or find any of it confusing) please let me know below. Everyone is coming from different backgrounds and different experience levels. And if you find this tutorial useful, please feel free to let me know as well * I should mention that although it is possible to create galleries in Processwire where each image is represented by its own page (and, as Ryan has mentioned, is often preferable since it is ultimately more scalable), sometimes the ease of using a single image field (which can upload and decompress zip files of images in mass) simply outweighs any drawbacks. If I had to create this gallery with the 1-image-per-page method, it would have taken hours to upload all of the images one-by-one without some sort of additional programming to automate the process.
    1 point
  16. Not like it is now. But it's still a valid exercise, change only a little bit and the function can become very useful function selector($tpl) { return wire("pages")->find("template=$tpl, limit=2, sort=company"); }
    1 point
  17. You can't use the API variables inside functions because of function scope. Use wire() instead $selects = wire('pages')->find("template=child-template, limit=2, sort=company"); Here's an explanation: https://processwire.com/talk/topic/5133-wire-function/?p=49459
    1 point
  18. Depending on just how corrupted things are, this should remove the field from all templates and then delete the field: $field_name = "myfieldname"; foreach($templates as $template){ foreach($template->fieldgroup as $field){ if($field->name == $field_name){ $template->fieldgroup->remove($field); $template->fieldgroup->save(); break 2; } } } $fields->delete($field); The first chunk of code is stolen from Soma. I just added the bit at the end to delete the actual field as well.
    1 point
  19. All methods in PW usually return a string, it doesn't print anything by itself. echo $modules->get("ShoppingCart")->renderCart() ;
    1 point
  20. Pete, This might be fixed already in the latest dev.
    1 point
  21. Thanks cstevensjr, Can Yes, it's using Pure CSS. The layout uses the responsive grid units (pure-u-*) nested as deep as necessary within rows (pure-g-r) to get the different parts to fit together and align properly. If you use the browser developer tools to inspect the DOM you should be able to see how they're all set up. The header and footer are just wrapper DIVs with the row (pure-g-r) inside.
    1 point
  22. Just ran into this issue myself as I wanted to use showIf in a reasonably complicated fashion with a repeater so I guess I'll just disable the showIf for now.
    1 point
  23. I'd be curious to see some examples of the different label layouts. I would think if I was selling products I would have a standard label layout format for all products. It sounds like it might even be better to have a few different fields for each product, like: Name Ingredients Usage Expiry date Just guessing what might be relevant of course, but the key thing with have the separate fields is that you can ensure a professional looking site by making sure the layout is identical for each product and quickly adjust them all at once through html/css. The way they want things now, it would be a nightmare to make any batch changes to the look of the labels. Of course I might not be fully understanding the requirements, in which case I am sorry - nothing to see here
    1 point
  24. Just to clarify: When defining the "Selectable Pages" in the PageField's input tab, select the users from the page tree: Admin > Access > Users
    1 point
  25. Looks promising, so lets see how the modules participation goes. I like how you can create the UI with simple HTML instead of setting millions of options which then render the HTML UI via JS in other RTE solutions.
    1 point
  26. Check your schema in FieldTypeImageExtra.module? eg: public function getDatabaseSchema(Field $field) { $schema = parent::getDatabaseSchema($field); unset($schema['description']); $schema['data'] = 'varchar(255) NOT NULL'; $schema['title'] = "varchar(1024) NOT NULL"; $schema['description'] = "text NOT NULL"; $schema['link'] = 'int(11) NOT NULL'; $schema['keys']['title'] = 'FULLTEXT KEY title (title)'; $schema['keys']['description'] = 'FULLTEXT KEY description (description)'; return $schema; }
    1 point
  27. I like the licence model where once I have purchased I may use on any site. Each model has it's benefits. For me the ease of managing a simple model where if I have bought it I can use it is a big one. Another thing I like is that if I have bought a module and learnt how to use it then there is nothing reducing my enthusiasm to use it on the next site I work on. I recognize that there is no 'one size fits all' and that therefore any solution has to be a compromise to some extent with some of the audience, all I can say personally is that the model used feels best to me.
    1 point
  28. See the FormBuilder or ProCache Dev version, as the plan is to license this in exactly the same way. Since this comes with multiple modules, I don't see a reason to have a single site license because you might like to use one module on one site and another on another site. So I'd rather just license this one as a buy-once use anywhere type thing. These modules won't be part of the core. They are a separate product from ProcessWire in the same way that FormBuilder and ProCache are. However there is one exception: FieldtypePageTable (not FieldtypeTable) is one of the ProFields and this one is being included in the core thanks to a sponsorship by Avoine. I'll be covering more about this Fieldtype soon, but it's already available in the dev branch and a great addition that I think many people will prefer to repeaters. The idea and concept for this field was designed by Apeisa and I think folks will love it. That's good to hear that you think so highly of these modules! But since nobody outside myself has developed a site with these modules, they definitely aren't essential to building a site with PW. Though they are certainly useful and big time savers! The tools essential to building great sites with PW will always be core. Like with FormBuilder and ProCache, the intention with premium modules is to provide time and/or resource saving tools for those that make a living from this and want additional tools to support their work. In addition, purchase of premium modules is a way to support the ProcessWire project as a whole (since we don't take donations). Where multi-language is needed, ProFields are intended to be used with ProcessWire's language alternate field support. Most ProFields involve lots of inputs and it's not practical to multiply those per language the way that FieldtypeTextLanguage does. Though they can work quite nicely in the language alternate context. Beyond language alternate support, Textareas can be used in a multi-language context, but since you define what each component is, you'd be responsible for defining separate components for each of your languages. Meaning, it's not specifically a multi-language field, but you can choose to use it in a manner that supports your multi-language needs. If we find that there are practical ways to expand upon any of the ProFields for further multi-language support, and there's sufficient demand for it, then we'll certain do what we can there too.
    1 point
  29. Just a quick note: On LOGIN ERROR (im my case a Session Throttle interception) the module sends a list of notices for the login screen: Notice: Undefined index: debug in /.../site/modules/TextformatterTagParser/TextformatterTagParser.module on line 207
    1 point
  30. Just bumped to v1.5.0 adding new transformations... "nospaces" - Removes all spaces from a field. "nl2br" - converts newlines to HTML breaks. "nl2spaces" - converts newlines to ASCII spaces.
    1 point
  31. Added new transforms... "initial" - Pulls the initial letter of the first word of the field. "initcap" - Pulls the initial letter of the field, capitalises it and appends '.' "initials" - Pulls the initial letters of words of the field. "initcaps" - Pulls the initial letters of words of the field, capitalised and postfixed with '.' "thinspaces" - Replaces multiple spaces with a single space. (integer) n - Selects the nth word of the field. Also fixed a PHP notice.
    1 point
  32. ere are few example showcases and experience reports that match their organization size (1k+ employeers). u building website no ? or u renovates company bathrooms ? tell.client look at web sites traffic not no. employee disclainer : i used to cleans bathrooms so i lookd at no. employee
    1 point
  33. Hopefully DJ Cramer will kick out the jams and restart this party. I'm all dressed up, standing on an empty dance floor. *crickets*
    1 point
  34. Yeah party is over time to go home now nothing to see.
    1 point
  35. The company behind WordPress is a very big supporter of open source and seems to be in it for the right reasons. I'm glad to have them powering a good chunk of the web rather than some product from Microsoft or Apple. I think WordPress has also paved a road for almost all other open source CMS products by building an audience that wasn't there before. WordPress (as a product) is fairly limited in what it really should be used for, but people push it as far as they can. Then if the need arises, they learn about and switch to other products that can do it better (like ProcessWire). WordPress market share seems to be good for the whole ecosystem (other than the persistent security issues). It's also opened many people to the idea of using open source rather than proprietary solutions... Microsoft and Apple (and so on) don't even want to touch the market because there is no money to be made in competing. So long as WordPress stays true to the original vision of being an entry level publishing tool, I think they will keep growing as a positive force. Shifting gears, but there was a question above about why there isn't a built-in tagging system in ProcessWire. You have to go beyond the term "tag" and consider what a tagging system actually is and what it does. It's a concept of relating one thing to other things. The reason ProcessWire doesn't have a tagging system is because it is a tagging system. Most know it as the Page field type in ProcessWire, which is one of the most important and fundamental types in ProcessWire. While the answer on how to use it as a literal tagging system can be found by looking in the admin side of the blog profile, I will write up some quick step-by-step instructions when I get the chance. But the primary difference between a tagging system and any other type of page reference is primarily just terminology, i.e. "tags" rather than "categories", etc.
    1 point
  36. +1 for integrating into main comments module as an option. Personally I prefer flat comments (as strange as it may sound, I find these easier to follow, since they're always in the order they've been posted) but I can think of many cases where nested comments would be preferred. Great job @Khan!
    1 point
  37. Forgot to mention: you can do a PW style 'or' in the field part of the tag. Like this... Look at the "{title|name|id}" page to... Or this... Hello {user.firstname|name>title}, ...
    1 point
×
×
  • Create New...