Jump to content

Module: PageTableExtended


MadeMyDay

Recommended Posts

7 hours ago, Robin S said:

I'm not sure what you mean. It's just as @MadeMyDay explained - the order is stored as part of the field. You just need to get the "block" pages via the field rather than as children of a parent.

 

Sorry, I should have been more specific. What I meant to ask was: It would be interesting to hear how other people manage their PTE pages when they're not direct children.

In my case choosing a custom (hidden from the client) parent for the layout would indeed be less confusing, but it would also mean that under the custom parent, all layout blocks (hundreds) from all projects would be listed without any context right? Not that the context is needed there, just need to get the OCD in check I guess..
 

Link to comment
Share on other sites

42 minutes ago, phil_s said:

In my case choosing a custom (hidden from the client) parent for the layout would indeed be less confusing, but it would also mean that under the custom parent, all layout blocks (hundreds) from all projects would be listed without any context right? Not that the context is needed there, just need to get the OCD in check I guess.

Yeah, I don't worry about that. No different to Repeater items in that respect. If you're concerned about orphaned pages you can set PageTable pages to be trashed or deleted if their parent page is deleted.

  • Like 3
Link to comment
Share on other sites

A tipp for your setup.

If you choose a parent page that is not under the /admin/ page you could use this snippet at the start of every block_template to hide pages from frontend access via url:

<?php
// the pageurl is hit this template file directly.
if ($page->url == $_SERVER["REQUEST_URI"]) {
  throw new Wire404Exception(); // show 404 page
}

But put everthing under admin is better solution...i don't read the docs to deep at start, too ;)

I use this module as kind of WYSIWYG blockbuilder on most installations and the largest amounth of blocks is ~ 300 for now....pages are scaling very well in PW. Some drive sites with several thausand pages under one parent...

regards mr-fan

  • Like 2
Link to comment
Share on other sites

  • 2 months later...

How do u implement a "text column" in pagetable field ?

processwire template allowed unique type field in a template. That's you cannot add three body textfield on the same template ?

I'm thinking of, are you create three separate text fields for the "text column" pagetable field ?

 

Link to comment
Share on other sites

As said on GitHub:

Compatibility should be given up to newest PW3. Look in the dev tools, if there is a JS issue. Never encountered something like this. "textblock" has a template associated? Without template there will no render in PTE. But shouldn't prevent modal though. Please show Console Output.

 

Link to comment
Share on other sites

  • 5 months later...
  • 1 month later...

Hi,

I'm storing all my  layouts under the "Repeater" page. Is it possible to get the parent page, I mean the page which is containing the specific pagetableextended via API?

E.g.: When I'm trying to call 

$page->parent->name

in lay_columns.php (one of files to render the output) it returns "repeater" wich is obviously because the repeater page is the parent. But I want to get the "original" parentpage where the pagetableextended field is stored.

I'hope you understand me.

 

Many greets!

Link to comment
Share on other sites

  • 2 weeks later...

I figured out a new problem:

I'm using repeaters in the layout template in order to give the editor the possibility to define some "same looking" boxes. Inside the repeaters there is amongst other things an image field. When I'm trying to resize it via the API like

foreach($page->rep_imgTitleBody as $item) {
	$img = $item->sing_img->size(600,400)->url;
	$out = "<img src=\"{$img}\" alt=\"{$item->title}\">";
};

 

though it works on the frontend but in processwire backend I'm getting an error:

Quote

Method Pageimages::size does not exist or is not callable in this context

 

Any ideas?
 

2017-07-04 22_21_14-Edit Page_ Home • vieregg-design.de.jpg

Link to comment
Share on other sites

  • 2 months later...
On 4.7.2017 at 10:22 PM, DV-JF said:

I figured out a new problem:

I'm using repeaters in the layout template in order to give the editor the possibility to define some "same looking" boxes. Inside the repeaters there is amongst other things an image field. When I'm trying to resize it via the API like


foreach($page->rep_imgTitleBody as $item) {
	$img = $item->sing_img->size(600,400)->url;
	$out = "<img src=\"{$img}\" alt=\"{$item->title}\">";
};

 

though it works on the frontend but in processwire backend I'm getting an error:

 

Any ideas?
 

2017-07-04 22_21_14-Edit Page_ Home • vieregg-design.de.jpg

@DV-JF

I came across a similar issue. I'm using a page reference field to select several pages containing just 1 image per page. As Ryan describes in this post.
I haven't checked for the frontend yet, but in the backend I'm getting the same error.

So even though the image field in the referenced pages is set to contain just 1 image, I have to loop through it as if it's a WireArray.

I changed your code in way that worked for me:

foreach($page->rep_imgTitleBody as $item) {
	foreach($item->sing_img as $image) {
    		$img = $image->size(600,400)->url;
    		$out = "<img src=\"{$img}\" alt=\"{$item->title}\">";
	}
};

@MadeMyDay

Is this an expected behaviour? I'm using ProcessWire 3.0.77 and PageTableExtended 2.3.3

  • Like 1
Link to comment
Share on other sites

I still have a problem with the output of PageTableExtended (PTE) in the backend. I took some screenshots to demonstrate it.

My configuration looks like this: In my PageTableExtended field I have a template containing a PageReference field. That reference field allows only one reference. The pages I then reference to contain just one image per page. That way I can reuse images on different pages. But also, with just one page allowed per reference field, I have the ability to reorder the images on my page in a visual manner. Mainly that for I have PTE in use.

The empty PTE field in the backend looks like this:
59d8d257731a6_1empty.jpg.d1b0b9249707f349c062b35538d9441f.jpg

In the backend I add an image by clicking on the +Image button, respectively I create a new page with a template containing a page reference field. The modal window opens and I reference a page with an image named "sample-image". Then I hit save and the modal window closes. The PTE field now looks like this:
59d8d3c2f044d_2beforesafe.jpg.934b1ef1a2ed7aa81c23fbfff2bd095c.jpg

The template of the reference field in the PTE echoes the url of the image in the referenced page. Just as I would do to display the image, but for demonstrating purposes without the surrounding <img> tags.

Pause for a moment. Right now everything is as expected. BUT...

 

Now to the strange behaviour of PTE: After I hit Save on my actual page, where the PTE field lives in, I get this:
59d8d3c4f0e98_3aftersave.jpg.deaffe42dafeed1308686172a4dd3828.jpg

As you can see, the url of the referenced image is incomplete, the [name].[ext] part is missing. So it's not possible to display the image in the backend!

But on the frontend everything is fine:
59d8d6db2f978_4frontend.jpg.6a35ec14d8d439892b9fd37d4cd18c24.jpg

 

@MadeMyDay Is this behaviour expected?

Has someone the same problems? Can anybody suggest a solution?

 

Thanks in advance!

 

Below are my .php files for the basic-page containing the PTE field and the subtemplate for the media_pagereference.

// basic-page.php
<?php namespace ProcessWire;

$out = "";
if (count($page->pageTableExtended)) {
    foreach ($page->pageTableExtended as $pte) {
        $out .= $pte->render();
    }
}
?>

<main data-pw-id="main" class="main">
    <?php echo $out; ?>
</main>
// media_pagereference.php
<?php namespace ProcessWire;

if ($page->pageReference) {
    $refPage = $page->pageReference;
    $img = $refPage->image;
    echo $img->url;
}

 

Link to comment
Share on other sites

8 hours ago, Omega said:

As you can see, the url of the referenced image is incomplete, the [name].[ext] part is missing.

For one reason or another, output formatting must be off when the PTE inputfield is rendered. To work around this, try...

// media_pagereference.php
<?php namespace ProcessWire;

$refPage = $page->getFormatted('pageReference'); // value will vary depending on "Page field value type" setting
if ($refPage->id) {
    $img = $refPage->image;
    echo $img->url;
}

...or more reliably (since it will work regardless of the "Page field value type" setting)...

// media_pagereference.php
<?php namespace ProcessWire;

$refPage = $page->getUnformatted('pageReference'); // always a PageArray
if ($refPage->count) {
    $img = $refPage->first->image;
    echo $img->url;
}

 

  • Like 1
Link to comment
Share on other sites

I got a solution for my problem described above.

I canged the settings for the image field that is allowed to contain just 1 image. Instead of returning a single element it now returns always an array of elements (hope the description is correct in english). Therefor I definitely need to either loop through the returned array (which is way too much, as there is just one image in it). So as szabez pointed out, a short and clean way is to use ->first()

@Robin SThank you for your suggestion, you where literally a few moments too late ;) But I'll give it a try!

Link to comment
Share on other sites

@Robin S sorry, your code didn't work for me, I had to change it that way:

// media_pagereference.php
<?php namespace ProcessWire;

if ($page->pageReference) {
    $refPage = $page->pageReference;
    $img = $refPage->getUnformatted('image')->first();
    echo $img->url;
}

Now it's possible to set the configuration of the 'image' field to return a single element instead of an array.

A second way next to the workaround I described above and a good opportunity to learn more about output formatting...

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

It is currently not actively under development but I use it as it is on several sites (I guess a lot of others do so, too). So I am wondering about this line:

<?php echo $page->pagetableextended->render(); ?>

The parts are just pages (see PageTable docs) . So with your code you just get an array of pages and PW is so kind to show you which. What you wanna do is:

<?php 
foreach($page->pagetableextended as $pe){
  echo $pe->render(); 
}
?>

 

  • Like 1
Link to comment
Share on other sites

Just now, Donald said:

Question: Can you recommended to use for bigger projects related to the fact that I would like to use it as an "content block builder" or like Lego for the frontend?

Sure, why not? I am using it on more than ten websites. Some of them have thousands of visitors each day, but that is not the crucial thing since the module doesn't do anything different than the PageTable module itself. It "just" renders the templates also in the admin. There can be some glitches (as this thread shows) but as long it works for you in the admin area, it will also work for your visitors ;-)

 

  • Like 2
Link to comment
Share on other sites

See it as an alternative to the Repeater Module. For the repeater you define (the same) input fields for each item. The PageTable module is technically pretty similar as both store the items in own pages somewhere. But with the PageTable module you have the opportunity to use different templates as input field sets to choose from. The PageTable module shows those (sub)pages as a table with each page as a row. PTE extends that functionality for rendering the items as they are rendered in the frontend.

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
×
×
  • Create New...