kaz Posted February 8, 2024 Posted February 8, 2024 I do different content sections with Repeater Matrix. Since there are more and more sections, I would like to choose another solution. I don't have any experience with Page Table, but based on what I've read, it seems like a possible alternative? My repeater matrix script is a foreach, so that the user can extend it as needed. <?php foreach($page->sections as $item) { if($item->type == 'content') { echo " <h1>$item->title</h1> $item->content "; } if($item->type == 'links') { echo " … "; } and so on } I can add the items of the above script as single templates for Page Table, and add them in a Page Table field (Details). In my base template I call the page table field, e.g. echo $page->render('sections'); On my first try, a child page was added, which I don't really want. The code from the template which I had added in the field (details) was not taken over either. In short, I need help. Can perhaps someone give me a little HOWTO on how to do this correctly? Maybe Page Table isn't suitable at all?
gmclelland Posted February 8, 2024 Posted February 8, 2024 This tutorial might help? https://processwire.com/talk/topic/27499-something-like-gutenbergdrupal-paragraphs/#comment-226306 2
gebeer Posted February 9, 2024 Posted February 9, 2024 Maybe you want to take a look at https://processwire.com/modules/fieldtype-page-table-extended/ That module hasn't been updated in a while but should have code that can point you in the right direction.
bernhard Posted February 9, 2024 Posted February 9, 2024 If you want a solid solution that has seen several years of development and is tailored exactly towards that use case have a look at RockPageBuilder: It will not only make your life as a developer easier, it will also tremendously improve the editing experience for your clients. Try it out yourself at https://pagebuilder.baumrock.com 1 1
markus-th Posted February 9, 2024 Posted February 9, 2024 20 hours ago, kaz said: I do different content sections with Repeater Matrix. Since there are more and more sections, I would like to choose another solution. Look at this idea: Since I have been using this method, I no longer need any other approach to build up the content on my pages and I also need far fewer different templates. You don't have to use depth, but it allows extremely flexible output of content when needed. My basic_page template look like this: <?php namespace ProcessWire; include "_header.php"; $items = $page->content; foreach ($items as $key => $item) { $item->position = $key; $item->all_items = $items; } foreach ($items->find("depth=0") as $item) { echo $item->render(); } include "_footer.php"; And all matrix "content" templates are inside the fields folder. 2
Robin S Posted February 9, 2024 Posted February 9, 2024 9 hours ago, Markus Thomas said: Since I have been using this method, I no longer need any other approach to build up the content on my pages and I also need far fewer different templates. If you like that approach you might like to try the Repeater Depth Helper module which is a development from that earlier idea. It gives you the depth structure for the whole repeater field from one method and also enforces a couple of depth rules to keep things sane. 2
kaz Posted March 2, 2024 Author Posted March 2, 2024 Is there perhaps an official documentation for PageTable? I can't find anything in the forum posts explaining how to render PageTable templates? I placed two templates in the /views folder and inserted them in the Page Table field. The editor can now add the elements of the templates. The section-content is saved on a hidden page which I created separately in the admin area. My nameofpagetablefield does not transfer any data. echo $page->render('nameofpagetablefield'); There is no error, I don't understand where to look? But how do I use foreach to render different items / templates?
gmclelland Posted March 3, 2024 Posted March 3, 2024 @kaz I posted a link to a tutorial in my post above. The difference is in that tutorial the templates exists in a “fields” directory and not in a views directory. Rendering fields template files are also described here https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-with-template-files 1
kaz Posted March 4, 2024 Author Posted March 4, 2024 @gmclelland I have it in the /views folder, not /fields, because in PageTable I have to select a template. PageTable does not allow to select a folder, so my templates are in the /views folder ? I would prefer to have the widget templates in an own folder, but it's not possible with PageTable. This is the code of my bodysection file (PageTable Field): <?php namespace ProcessWire; // Loop through each element in the PageTable field foreach($bodysection as $section) { // Get the template of the page in the PageTable field $template = $section->template->name; // Depending on template, render the content switch($template) { case 'section-content': // "section-content" template rendered here echo $section->render(); break; case 'section-gallery': // "section-gallery" template rendered here echo $section->render(); break; case 'section-…': // and so on break; } } Only the Page IDs are received in frontend, at least the IDs are correct, yeah: 1122|1124
7Studio Posted May 5 Posted May 5 This is quite old topic but I just wanted to add that you can specify own folder by using WireIncludeFile, (code used in another purpose - please treat it just as an example - but should work also for the Page Table field) <?php foreach ($page->page_table as $section) { $file = 'layout/sections/'. $section->template->name .'.php'; if (file_exists($file)) { wireIncludeFile($file, array("section" => $section)); } else { echo __('no section layout file found'); } } ?> API reference WireIncludeFile In example above $section is passed as a page reference, so in your section files $section will behave as $page for that template. I'm not sure if the PageTable is a good replacement for this purpose, teppo PageTableNext module could work better here.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now