Leaderboard
Popular Content
Showing content with the highest reputation on 01/17/2015 in all areas
-
I know this thread is old, but with the new Log viewer that Ryan just set up, I have started putting the following just before the body close tag (in main.inc or foot.inc or wherever needed so it is on all pages): if($user->isSuperuser()) echo '<iframe width="100%" height="200px" src="'.$config->urls->admin.'/setup/logs/view/debug/?modal=1"></iframe>'; Then whenever I need to log a variable or output of a function etc, I use the following in my template file: $log->save('debug', $problem_variable); If you need to output an array, json_encode is quite a nice solution: $log->save('debug', json_encode($array)); This will give you (as superuser) a panel showing the "debug" log output (which shows latest entries at the top) at the bottom of your site - very handy10 points
-
Welcome to PW!! You pretty much had it $matches = $pages->find("somefield*={$page->title}"); $page is always the current page. You can't have spaces within each part of the selector, so I remove the spaces around: *= Remember that if you are "find"ing you will end up with an array of results, not just one, so you need to decide how to handle these. The usual approach is to foreach through them. So you would then: foreach($matches at $match){ echo "<li>{$match->title}</li>"; } or something along those lines.5 points
-
@Ivan: you've got some very good points there. At the very least these are things that should be mentioned somewhere; for most parts the situation isn't quite as "unorganised" as it apparently seems You're right in that Ryan Cramer Design is the only company "officially" behind ProcessWire, but we do also have some corporate sponsors, such as Avoine. Programs like the ones mentioned here could still be a bit problematic for us, as those probably work best when there's a larger company behind the system, but I'm not an expert on this, so what do I know. About your other points, the forum has a dedicated moderating team, and there's some kind of a process for most of the things you've mentioned. Regarding the roadmap, for an example, anyone can make recommendations; that's what Wishlist & Roadmap is for. Modules directory is currently managed by Ryan, and a lot of folks contribute to ProcessWire, though at the end of the day all core contributions go through Ryan's hands (intentionally). We're also already doing a lot of marketing, though it's often somewhat subtle; word of mouth, comments here and there, articles, videos, and blog posts. ProcessWire Weekly, ProcessWire Recipes, ProcessWire.tv, isit.pw, and many other sites and projects are geared towards getting the word out there too. Sure, we can (and should) do even more, but just wanted to point out that a lot of stuff is already happening4 points
-
There is probably a more robust way to do this, but, uh, I tried $this->addHookAfter('InputfieldPageTable::render', $this, 'PageTableRender'); public function PageTableRender($event) { $return = $event->return; $from = strrpos($return, "<div class='InputfieldPageTableButtons"); $to = strrpos($return, "</button></span></div>", $from); $buttons = substr($return, $from, $to-$from) . "</button></span></div>"; $event->return = $buttons . $event->return; } The Inputfield’s original render method puts the button html in the variable $btn, but I suppose there’s no way to just access that one. Another way to duplicate the button elements would be to just copy the code that generates them.4 points
-
I thought I'd start this thread so we could all share our favorite debugging techniques. The idea for this came from this post by Soma: http://processwire.com/talk/topic/4416-delete-user-when-page-is-deleted/?p=43320 and some of the followups with other suggestions. Here's one that I find really useful. It allows you to output content to the browser's console from PHP. It sends content from PHP through javasacript's console.log(); Not as powerful as FirePHP etc, but simple and easy to use. Put this function somewhere that it will be available to all your template files. function debug ($data) { echo "<script>\r\n//<![CDATA[\r\nif(!console){var console={log:function(){}}}"; $output = explode("\n", print_r($data, true)); foreach ($output as $line) { if (trim($line)) { $line = addslashes($line); echo "console.log(\"{$line}\");"; } } echo "\r\n//]]>\r\n</script>"; } Then you can simply put these anywhere in your templates: debug('test'); debug($variable); debug($array); This keeps your page content clear of debug messages and is easier then looking in log files, like if you were to use error_log() What are your favorite techniques?3 points
-
Ryan doesn't increase the point version number with every commit, so your best option is to subscribe to the dev RSS feed: https://github.com/ryancramerdesign/ProcessWire/commits/dev.atom3 points
-
I do not know of any organization related to PW other than Ryan Cramer Design, which might be a one man enterprise (do not know anything about it). There is this forum community with admin team organised somehow (do not have any info on this either). There are people taking care of this forum software (seem like Pete is one of them or the only one of them). I can imagine mentoring programs require someone to organise mentoring, and it is likely we do not have no organised structures to cope with that. Ryan seems to be pretty busy with his outstanding job developing Processwire and probably doing some custom web design and development. My opinion is that the time is right for ProcessWire community to become more organised. There are tasks for organised community which have not been covered yet like: maintaining modules directory up to date, qulifying modules to it; organizing translation activities; making recomendations on the roadmap; actually doing some development to help Ryan; doing some marketing; writing and maintaining some documentation on PW; and mentorin talented folks of course ) I do not know how it could or should be done. I do not know anyone else's intentions on that, but it seems like some people here are willing to take part in those kind of activities (myself included).3 points
-
Why not using normal PHP? $_SERVER['REQUEST_URI'] More: http://php.net/manual/de/reserved.variables.server.php Or if you're on a frontend template you can use: $page->url And here you can find all config urls provided by Processwire API: http://processwire.com/api/variables/config/2 points
-
@Ivan: https://github.com/ryancramerdesign/ProcessWire/blob/dev/wire/core/ProcessWire.php#L362 points
-
This module is improved and extended successor to Version Control For Text Fields. It handles everything it's predecessor did -- providing basic version control features for page content -- and quite a bit more. Download or clone from GitHub: https://github.com/teppokoivula/VersionControl. This module requires ProcessWire 2.4.1 or later, mostly because of the file features, which require certain Pagefile and Pageimage methods to be hookable. There's no sensible way around this limitation; for those stuck with < 2.4.1, Version Control For Text Fields will remain a viable option. What does it do? While editing pages, fields with old revisions available show up with a new icon in their header bars. By hovering that icon you get a list of available revisions and by clicking any one of those the value of that particular field is reverted to that revision. No changes are made to page until you choose a revision and save the page, which means that you can keep switching between revisions to get an idea what's really changed without inadvertently causing any content to change. The module also adds a History tab to page edit. This tab opens a view to the history of current page in the form of "revisions" -- each of which is a group of changes to page fields processed during one page save (similar to revisions in various source control applications). There are three actions you can perform on these revisions: adding comments, live previewing what the page might've looked in that revision and restoring the page to specific revision. One specific feature that has been a big thing for me personally is support for file (and image) fields, as the original version control module felt rather incomplete without it. I'm hoping to take this a lot further performance, stability and feature wise, but as it stands right now, it's already included here and should be fully functional. Watch the video preview here I prepared a little screencast outlining most of this: http://youtu.be/AkEt3W7meic. Considering that it was my first screencast ever, I'd like to think that it wasn't that bad.. but I might give it another shot at some point, this time planning a bit before hitting "record" Upgrading from Version Control For Text Fields For those already using Version Control For Text Fields, I've added something extra. If you upgrade that module to it's latest version, you should see a new checkbox in it's settings screen saying "Don't drop tables during uninstall". If you check this, uninstall the module and then remove it's files (this is required in order to install Version Control), your old data should be automagically imported to Version Control. Import has only been tested with limited amounts of demo data. Proper tests are yet to come, so please be careful with this feature! Update, 21.6.2015: as of today, this module is no longer in beta. While all the regular warnings still apply (making changes, including installing any new modules, on a production site should always be considered risky) Version Control has gone through pretty extensive testing, and should be as stable as any other module out there.1 point
-
@teppo: In no way am I critisizing, but rather offering. All that you mentioned is well known to me as well as probably to everyone participating in the discussion. And I do understand that you bringing that up for people not aware of all that awesone activities around PW (and I think you are doing what should be done). The future of PW as a community as well as a software is of significant interest to me as I rely on both as means to make a living. And as a way to live too (in some respect of course). I thought that the question of the topic just requires this broader context of PW commuity current situation to be unswered. And took this chance to speak my mind))1 point
-
In the meanwhile I wrote a simple function that I put in an myfunctions.inc file that I can include whenever I need. Then I can call the correct date in this way <?=rightdate($page,"datainizio");?> //** rightdate is the name of the function that you can find below Here the function: function rightdate($rightselector,$mydate) { $user = wire('user'); $page = wire('page'); if ($user->language == "1061") //** here you have to insert the id of your language {setlocale(LC_ALL, array('it_IT.UTF-8','it_IT@euro','it_IT','italian')); //** you can to whatever language you need return strftime('%d %B %Y', $rightselector->getUnformatted($mydate)); } else {return $rightselector->$mydate;}} I'm a newbie and for sure this is not an excellent method but maybe this could help someone else that is learning like me .1 point
-
Thanks for a very constructive post, Ivan! This has got to be one of the lowest-hanging fruits. Weblate is ready for us: https://processwire.com/talk/topic/8389-centralized-translation-of-processwire-and-pw-documentations/ https://github.com/PW4ALL/ProcessWire-Weblate1 point
-
New to ProcessWire and seriously loving it. I'm also relatively new to PHP (there is my disclaimer!). I am trying to come up with the following PHP statement to find related pages. I would like to find all pages where "some_field" contains the page title of the current page. So the statement might look something like this: <?php $matches = $pages->find("some_field *= title of the current page"); ?> Greatly appreciate any nudge in the right direction. Thanks.1 point
-
I can see the concern especially about assistive software. But on the other hand html 5 is not a draft anymore and the last update of your article was a few month before that. I think for my current project I'll still go with a traditional headline structure. But in the long term the html5 spec should become more and more supported. This should make building modular sites much easier, because you don't need to care if you're placing the module after a h3 or h4. Each h1 in this module will automatically become a h4 or h5, given it's wrapped in a sectioning element.1 point
-
I use a variation on some mysqldump commands and zip commands via cron to backup daily to a folder on each site's account, then have a scheduled script on my NAS download the backups each night. I could do with improving it so it sends reports if it couldn't find a backup file but that's an easy enough thing to check. I'm sure I could use the programs on my Synology to then backup to the cloud if I wanted to. Of course if I had hosting at two different webhosts it would all be quicker to transfer backups between them but there's something reassuring about having a backup on a local device1 point
-
I would also greatly suggest you use this to test sending your email : http://www.mail-tester.com. It will also provide suggestions on how to improve your mail delivery systems to prevent outbound emails to be seen as spam.1 point
-
This article summarizes the current concensus: http://blog.adrianroselli.com/2013/12/the-truth-about-truth-about-multiple-h1.html?m=1 In a word, don't use multiple H1.1 point
-
Interesting approach to tagging You’re trying to specify the parent by name, but I’m pretty sure ProcessWire would much rather have a page ID or a path (meaning, wrapped with forward slashes). Because PW can tell “genre” is not numeric (so not an ID), it treats it like a path, as if the slashes were there, but there are no tags under “/genre/”. They’re under “/tags/genre/”. So try that and it should work. Alternatively, specify that you’re selecting by name: $genres = $track->tags->find("parent.name=genre"); I can see how this can seem confusing, because when if you were looking for a direct child of the homepage, it would work. In that case, the path is the same as the name with slashes. Because you’re not really selecting “dynamic” pages here, but rather pages that are a fixed part of your site’s structure, you might want to use IDs instead. That way, if you later want to change a page name/path, you can do it comfortably in the admin, and don’t have to go around fixing your selectors.1 point
-
Hey @Marvin, 1) Please add a Supportboard-Link to this entry in the modules directory. . . 2) Is it right that you do not respect any of the sitewide PW default settings for images? Not those that optionally can be defined especially for ImageManipulator nor those that are defined for the ImageSizer? // from core imageSizer 'autoRotation' 'upscaling' 'cropping' 'quality' 'sharpening' 'defaultGamma' 'useUSM' // for manipulator only 'bgcolor' 'targetFilename' 'outputFormat' . . 3) In the description of Gim you say that the only options that can be specified and set are quality and outputFormat, but Quality seems not to work, I always get the same result in filesize. OutputFormat works partly, means: when I try to create a jpeg and a png from the same image, (what I can do with Pim), it does not create the second file without forcing a recreate! And when I force recreation, it overwrites my first image with the second rendering. This is because it does not reflect the outputFormat in the filename. I use this test code: $image = $page->images->eq(0); $w = intval($image->width / 10 * 2); $h = intval($image->height / 10 * 2); echo "<p>test with defaults<br />"; $gim = $image->gimLoad('gim1')->resize($w, $h)->save(); echo filesize($gim->filename) . ' :: ' . $gim->url . '</p>'; echo "<p>test with outputFormat PNG<br />"; $gim = $image->gimLoad('gim1')->resize($w, $h); $gim = $gim->setOptions(array('outputFormat' => 'png'))->save(); echo filesize($gim->filename) . ' :: ' . $gim->url . '</p>'; echo "<p>test with quality 100<br />"; $gim = $image->gimLoad('gim2')->resize($w, $h); $gim = $gim->setOptions(array('quality' => 100))->save(); echo filesize($gim->filename) . ' :: ' . $gim->url . '</p>'; echo "<p>test with quality 20<br />"; $gim = $image->gimLoad('gim4')->resize($w, $h); $gim = $gim->setOptions(array('quality' => 20))->save(); echo filesize($gim->filename) . ' :: ' . $gim->url . '</p>'; and get this result: test with defaults 21235 :: /site/assets/files/1/pim_gim1_basename_02.jpg test with outputFormat PNG (and not forcing recreation) 21235 :: /site/assets/files/1/pim_gim1_basename_02.jpg or test with outputFormat PNG forcing recreation (look filesize!!) 178060 :: /site/assets/files/1/pim_gim1_basename_02.jpg test with quality 100 21235 :: /site/assets/files/1/pim_gim2_basename_02.jpg test with quality 20 21235 :: /site/assets/files/1/pim_gim4_basename_02.jpg . Also there is no validation done. Not for supported filetypes nor typos, and also not for a valid range for quality. . . 4) Why do you not keep IPTC, what is (sort of) mandatory within PW? At least you should print a big warning at the very top of the announcement for those that rely on this. (because AFAIK it is supported by every other image related part in PW since Version 2.3, or do I miss something?) . . 5) Same with the big warning should be done in regard of sharpening! The lib you implemented does not support any sharpening method! As a sidenote, one of the most timeconsuming image manipulations with GD / PHP is sharpening! . . 6) Also the lib does not support transparency in GIF, it renders them with black background. Detecting the need for AutoRotation is not supported too. . . 7) Ah, - regarding my post about the Imagick adapter I have seen there, this looks a bit like a stillbirth. (https://github.com/Gregwar/Image/pull/65) . . . When first reading your announcement here I was very happy because I have started a few times to rewrite the Pim to make it faster and more robust, but couldn't finish it, (lots of work to do). But now for me it sounds a bit more like a marketing strategy than a real chance for me to get my hands on a better Pim implementation in PW. . . . Besides the above mentioned, here is a list of not supported methods in Gim: getOptions (very limited) setOptions (very limited) getImageInfo (returns nothing) getPimVariations removePimVariations sharpen unsharpMask stepResize watermarkLogo watermarkLogoTiled watermarkText canvas blur pixelate getMemoryImage setMemoryImage . The supported methods are: brightness colorize contrast edgedetect emboss flip grayscale negate rotate sepia smooth . New methods, that are in Gim, but not in Pim: mergePageImage (can be used for watermarking) merge (can be used for watermarking) write (can be used for watermarking) overlayImageStretched (can be used for watermarking) // drawing functions circle ellipse line rectangle roundedRectangle . And those are methods from Gim that could be used to emulate our PW crop and upscaling settings: crop zoomCrop cropResize forceResize scaleResize1 point
-
I think you can prevent them from deleting their own page by using 2 roles. Role 1 would have edit but not delete permissions and would be assigned to their main page. Role 2 would have edit and delete permissions and would be assigned to all the allowable child templates of their main page. (See this post/thread) Here's the modified version of PageEditPerUser. PageEditPerUser.module I'm not entirely this meets all your requirements — I haven't read this topic all that close to be honest.1 point
-
If you have template cache enabled you have additonal options appearing for defining GET or POST variables on which cache is not enabled. So enter some GET or POST vars you have in your form and it works.1 point
-
@Ivan Gretsky, that one is already fixed (dev). So those settings will work fine again I guess.1 point
-
It's all fixed in the latest PW dev version. Martijn worked out one fix, but I think in the end Ryan solved the problem in a different way: https://github.com/ryancramerdesign/ProcessWire/commit/5575ef62bb1695d98162bc3278b8d39bb66433b2#diff-995c5c9ce48d4bff459f52363c6e190eR4011 point
-
1 point
-
Finally bit the bullet and started learning ProcessWire with my own website. I've been using WordPress for about 10 years (and B2/cafelog before that!) but I really like what I see out of ProcessWire. I figured I should eat my own dog food so to speak before trying to use PW on a client site, so I present my redesigned portfolio site. http://builtbydavid.com/ BTW thanks go to everyone in this forum that contributes information. Whenever I wasn't sure how to do something, the site documentation here helped, and the forum posts helped where the documentation left off.1 point
-
From my point of view this has less to do with html5 and more to do with SEO. The general thought is that you should have one H1, then a group of H2s, more H3 and so on. Though there are arguments against that as well. It is all about second guessing Google and Bing When it comes to HTML5 and SEO, however, it is probably more important to look at structural elements such as <article> and <section> and then the relevant attributes from Schema.org: <article role="article" itemtype="http://schema.org/BlogPosting" itemscope> And so on1 point
-
All the taxonomy is handled by page fields. Some are just basic fields like Origin and Growth habit, and others like Conclusion Type and Zones are part of a PageTable. (Screenshots at the end of the post). There is a lot of JS involved in the filters — more than I have time to explain at the moment. The short version: Filter selections build a URL containing the page IDs for any selected filters via JS. We needed the URIs to be as short as possible, since they will be frequently emailed, and eventually cited in publications. They end up looking something like: /?zones=1030,1028&types=1082,1080&growth_habit=19040,1022 A selector is then built from those GET variables in the template. // default selector, used for assessment page $selector = "template=species, limit=16, sort=name,"; // zones GET variables if ($input->get->zones){ $zones = explode(",", $input->get->zones); $q = implode("|", $zones); $selector .= "@conclusions.conclusion_zones={$q}, check_access=0,"; } It gets a little more complicated, because of the infinite scroll. A maximum of 16 results are initially shown for any query, additional items are pulled in via AJAX on scroll. So if there are GET variables involved, the AJAX call needs to pass them along. In the JS function getUrlVars() { var vars = {}; var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars; } var GET_zones = getUrlVars()["zones"]; There is a GET_* for each possible filter. All of which are passed via the data param in the $.ajax() call. data: { start:start, query:query, zones:GET_zones, types:GET_types, origin:GET_origin, growth_habit:GET_growth_habit, tool_used:GET_tool_used }, Screenshots This is a bit of a disjointed explanation, but should give you some idea.1 point
-
My search for this ended with xcloner: http://www.xcloner.com/ standalone version ! This stuff is for real.1 point
-
1 point
-
PageImage Manipulator - Tips & Examples * how to create a PNG with transparency for the watermarkLogo method If you can use adobe photoshop, you simply may download and install this action: photoshop_action_PW-png-creations.zip create an empty image (transparent, not white or black) of 2000 x 2000 pixel write / paste your text and / or logo in a single color, (e.g. black) when finished with your text you should have one single layer with text on transparent background then click the action PW-png-creations -> 2000px-square-to-smooth and you are done. Hhm, maybe before saving you want to tweak the global transparency of the image a bit. That one used in the ProcessWire example was set to 75% instead of 100%. Just try out what looks best for you. ------------------------------------------------------------------- * did you know that you can save to different file formats, regardless of source format? You only have to specify your desired format (gif, jpg, png) with the optionally options array with a key named outputFormat and pass it with your call to pimLoad() or use setOptions() before any other action-method: // assuming the first image is a jpeg $img = $page->images->first(); // define outputFormat $options = array('outputFormat'=>'png'); // apply it together with other actions $myPng = $img->pimLoad('myPrefix')->setOptions($options)->width(240)->pimSave(); //------------------------------------------------------------------------------------------ // you may also do it as a OneLiner only with the image format conversion $myPng = $page->images->eq(0)->pimLoad('myPrefix', array('outputFormat'=>'png'))->pimSave(); // or you can use the setOutputFormat method $myPng = $page->images->first()->pimLoad('myPrefix')->setOutputFormat('png')->pimSave(); ------------------------------------------------------------------- * (how) can I use the ImageManipulator with other imagefiles than PW-Pageimages? You can load any imagefile from your servers filesystem into the ImageManipulator with: $pim = wire('modules')->get('PageImageManipulator')->imLoad($imageFilename); // or $pim = $wire->modules->get('PageImageManipulator')->imLoad($imageFilename, $options); You can directly with the imLoad-method pass specific $options or you can do a separate call to setOptions(). Then you do your desired actions and last but not least you call save()! Most time I think the original passed file gets overwritten with the manipulation result, but you are also able to save to a different name and / or fileformat. If so, it is useful to get the final (sanitized) filename back after saveing. $optionalNewFilename = $pim->setOptions($options)->height(360)->flip()->blur()->save(); Also you may call this in one line if you prefer: if(false!==$wire->modules->get('PageImageManipulator')->imLoad($imageFilename,$options)->height(360)->flip()->blur()->save()) { // success !! } ------------------------------------------------------------------- * how can I use the PageImageManipulator with my own module/s? If you build a module that do some image manipulation you can define the PIM as needed dependency in your ModulesInfo method with the key 'requires'. You may also force to install the PIM if it isn't already with the key 'installs': public static function getModuleInfo() { return array( // ... 'requires' => array('PageImageManipulator'), 'installs' => 'PageImageManipulator', // ... ); } detailed infos are here: http://processwire.com/talk/topic/778-module-dependencies/ additionally, if you need to check if a module dependency has a minimum version number, you can do it in your install method like this: public function ___install() { // check that at least the minimum version number is installed $needed = '0.0.3'; $a = wire('modules')->get('PageImageManipulator')->getModuleInfo(); $actual = preg_replace('/(\d)(?=\d)/', '$1.', str_pad("{$a['version']}", 3, "0", STR_PAD_LEFT)); if(version_compare($actual, $needed, '<')) { throw new WireException(sprintf($this->_(__CLASS__ . " requires PageImageManipulator %s or newer. Please update."), $needed)); return; } // ... more code } ------------------------------------------------------------------- * global options in site/config.php You can create a config-array in your site/config.php. If you look into it you will find a config array for the ImageSizer that comes with the PW core $config->imageSizerOptions = array( 'autoRotation' => true, 'sharpening' => 'soft', 'upscaling' => true, 'cropping' => true, 'quality' => 90 ); You can define another array with these keys: $config->imageManipulatorOptions = array( 'autoRotation' => true, 'sharpening' => 'soft', 'upscaling' => false, 'cropping' => true, 'quality' => 90, 'bgcolor' => array(255,255,255,0), ); You don't have to specify all of the options. PiM reads the imageSizerOptions and merge them with the imageManipulatorOptions. So if you want to have different values you can specify them in imageManipulatorOptions to override those from imageSizerOptions. Only one option isn't present with the imageSizer: bgcolor. This is only used by the imageManipulator. ------------------------------------------------------------------- * using PiM together with the awesome Thumbnails Module (http://mods.pw/1b) If you use the Thumbnails Module together with PiM, you can set two options in the site/config.php under imageManipulatorOptions: $config->imageManipulatorOptions = array( // ... 'thumbnailColorizeCustom' => array(40,-35,0), 'thumbnailCoordsPermanent' => true ); For the colorize dropdown select you can define the custom color here and with the second param you enable/disable permanent storage of RectangleCoords and params. The coords and params are stored with Thumbnails Module per session, but are lost after the session is closed. If you enable permanent storage these data is written into a custom IPTC field of the original imagefile. ------------------------------------------------------------------- * some more examples will folow here . . . -------------------------------------------------------------------1 point
-
The problem with having multiple sites pulling and/or manipulating from the same database is that the two sites become dependent upon one another. If something needs to change with the data source, then both sites need to change. If one site becomes compromised, both sites are compromised. When two sites need to talk to each other, regardless of platform, the best practice is to use JSON or XML web services. For the example you mentioned, and in the context of ProcessWire, I would use RSS feeds. Generate a feed of the data you want to share using the RSS Feed Generator module. Then output it on another site using the RSS Feed Loader module. Now you have two sites easily sharing data in a bulletproof manner. For more complex needs, you might also want to check out the Pages Web Service module.1 point
-
Awesome! Yeah first! Now going to look at video.... Edit: Looks really great! Thank you for this preview! For sure very useful. Now my question. Would it be any way possible to have to be able define multiple "block" templates (with different fields each) for the repeater field? Then when adding a new item, it would ask for the block template to select first. Pretty much the same as it is now, just with variable templates. I can imagine it would require something complete different concept/codewise. It's just what I kinda "expected" from (the) repeatable page element, so I don't have to use child pages anymore. It can be very handy to be able to define "blocks" that can be chosen from, to build a page. TItle, Video, Text-Image, Linklist, Text. Do you see a good way to add such "variable blocks" feature to PW through a module, much similar like this one? Maybe they're also just invisible childpages that are editable and sortable via the parent page's block field. Just blah blah, I don't really know what all need to be considered. Have you implemented this repeater using hidden pages?1 point