Jump to content

Page Table as Repeater Matrix replacement?


kaz
 Share

Recommended Posts

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?

Link to comment
Share on other sites

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

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

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.

image.png.42476271509179076b818c84fd23748a.png

  • Like 2
Link to comment
Share on other sites

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.

  • Like 2
Link to comment
Share on other sites

  • 3 weeks later...

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.

pagetable.png.dc14c7ff7ff611d4b52685abce0abb29.png

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?

Link to comment
Share on other sites

@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

  • Like 1
Link to comment
Share on other sites

@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

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...