Jump to content
jonatan

Page Reference field - unpublished pages showing up in frontend

Recommended Posts

Hi! 😄

SITE SETUP / DESCRIPTION:

What? Online art magazine with an "All featured works" and also an "All featured artists" index page, and also individual "Work" and "Artists" pages, and data relations between the different artists and their artworks.

So, I have two different page reference fields, connected by @Robin S's awesome Connect Page Fields module (though that has nothing to do with the issue in fact, Robin's plugin works great! and the issue is the same with or without it).

The two Page Reference type fields are called "works" and "artists". They are meant to simply connect different artists to different artworks.

Fx:
Work 1  (page)  –> artists (Page Reference field) : Artist A (page)           --->>> (automatically connected)         Artist A (page)  –> works (Page Reference field) : Work 1 (page)
Work 2  (page) –> artists (Page Reference field) Artist B  (page)           --->>> (automatically connected)         Artist B (page)  –> works (Page Reference field) : Work 2 (page)

ISSUE:

On both Page Reference fields, both on "artists" and on "works" this option "Allow unpublished pages" is activated:

1851594620_Skrmbillede2020-04-24kl_14_46_38.thumb.png.0dbfdc6787234dc4fb6a58adad6fb4d6.png

As it says in the option description, supposedly, unpublished pages should be selectable in the page reference field, but they should not be visible, they shouldn't appear, on the front-end...

Frontend:
To show all works related to the artist on the artist individual page I'm doing this:

<?php
foreach($page->works as $item) {      
	echo "<img src='{$item->image->first->width(200)->url}' class='pr-2'><a class='pr-4' href='$item->url'>$item->title</a>";
}

The problem is now, unexpectedly, if some work is set to "Unpublished", it shows up anyways!

WORKAROUND:

So to get around this I figured out that I can do this:

<?php
foreach($page->works as $item) {
	if($item->is(Page::statusUnpublished)) { 
		return;
	};    
	echo "<img src='{$item->image->first->width(200)->url}' class='pr-2'><a class='pr-4' href='$item->url'>$item->title</a>";   
}

But ofc this is a rather inelegant "solution" which shouldn't really be necessary, right? 

I might be missing something basic here, but really can't figure out what it is... I hope one of you awesome guys can help me out 😊

Thanks a lot in advance!

All the best,
Jonatan

Share this post


Link to post
Share on other sites
15 minutes ago, jonatan said:

The problem is now, unexpectedly, if some work is set to "Unpublished", it shows up anyways!

Just confirming that you are not inadvertently checking this whilst still logged in (as a supersuser)? :-).

Share this post


Link to post
Share on other sites

@kongondo Nope 🙂 Even tried to look at the page in a different browser. 

Share this post


Link to post
Share on other sites
16 minutes ago, jonatan said:

if($item->is(Page::statusUnpublished)) { return; };

You maybe meant to use continue here instead of return 🙂

Share this post


Link to post
Share on other sites
9 minutes ago, kongondo said:

You maybe meant to use continue here instead of return 🙂

Ah yup haha #noob-php. 

Thx @kongondo. That still only makes the workaround more correct though 😅😅 haha

Share this post


Link to post
Share on other sites
10 minutes ago, kongondo said:

Congratulations! you've found a bug :-).

Yaaaay! Horray! That's my first! 🏆🎉🐞😊

And thanks so much for such instant and helpful reply @kongondo! Still continiusly amazed by this great forum and the amazing people behind the PW community! 

 

I'll go file it 😊

Take care! And have a great weekend! 

All the best, 

Jonatan 

  • Like 4

Share this post


Link to post
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

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By jds43
      Hello, I'm trying to list the categories, on the front through select options, that have been selected by page reference field (multiple pages PageArray) on the child pages.
      Things to Do (would only display three, six, seven, nine in select)
      -thing one (-category three, -category nine)
      -thing two (-category six, -category seven)

      Lodging (would only display one, two, three, four in select)
      -lodging one (-category one, -category two)
      -lodging two (-category three, -category four)

      Dining (would only display five, six, seven, eight in select)
      -dining one (-category five, -category six)
      -dining two (-category seven, -category eight)
      Categories(hidden page)
      -category one
      -category two
      -category there
      -category four
      -category five
      -category six
      -category seven
      -category eight
      -category nine
      -category ten
      $categories = $pages->find(1129)->children('include=hidden'); foreach($categories->references('category') as $ref) { echo $ref->title; } This selector isn't working, but it seems 'references' would be helpful. I've never used it before, so I'm not sure how to employ for this.
      https://processwire.com/blog/posts/processwire-3.0.107-core-updates/#page-gt-references
    • By Pip
      Hi, Everyone! 
      I'm currently working on a page reference field and set it for multiple pages (AsmSelect) for the input. Is there a way for me to add an image field (aka Avatar) and the title of page in the radio button? 
      I used the field name enclosed in the { }. Didn't work. It appeared a text instead. 
      Thanks in advance and hope to hear from you soon!
    • By t0b1
      Hello there, and thanks for ProcessWire!
      I'm getting to know ProcessWire while doing my first project using it and I really like it so far.
      The challenge I'm facing right now is the following:
      I have a One-Pager using fullpage.js, realized as a single PW-Page containing a Repeater Field where each Repeater Item is one Section.
      Some Sections are supposed to have a little menu at the Top which references/links to different Sections of the Website, so I wanted to use a Checkbox Field "Top Menu" to decide if a Section gets a Menu and a Page Reference Field to choose the different Sections (Repeater Items) it should contain.
      I've already accomplished this by pasting the following code into /site/ready.php:
       
      $wire->addHookAfter('InputfieldPage::getSelectablePages', function($event) { if($event->object->hasField == 'top_menu_entries') { $page = $event->arguments('page'); if($page instanceof RepeaterPage) $page = $page->getForPage(); $event->return = $page->; } });  
      The only problem that still remains is that when I select the Entry of the Repeater Item itself it doesnt save the selection, meaning after I saved it's unselected again.
      On some Sections I do want a Menu-Entry for the Section itself though (which would be styled differently and not link anywhere) for Continuity-Reasons, any ideas on how to achieve that?
    • By Flashmaster82
      Hi, can you guys help a beginner with a problem..
      On my template (profile_page) i have a dropdown (page reference) where i can choose a sports team (team_page) that is related to that profile which is also its parent. Then on my Competition1 page (competition_page) I have page reference field (profiles) a dropdown that i want to display only profiles that has choose a specific sports team (template=team_page) the page parent to be specific.
      Structure/Template
      Sports_team1 (team_page)
           Profile1 (profile_page)
           Profile2 (profile_page)
           Profile3 (profile_page)
           Competition1 (competition_page)
       
      ready.php
      <?php $wire->addHookAfter('InputfieldPage::getSelectablePages', function($event) { if($event->object->hasField == 'profiles') { $relative = $page->parent->name; $event->return = $event->pages->find("template=profile_page, sports_team=$relative"); } }); ?> This returns with no results in the dropdown. If i remove sports_team=$relative then it displays all profiles that have profile_page as template, so it works almost. But i will have more sports teams so this is just an example. I only want to display the profiles that has choosen the parent team on there profile page in admin not front end.
      I hope i was able to explain it so you guys can understand a little bit. Need some help please! /Thanks
       
       
    • By wesp
      Hello everyone,
      Is there a way to access the key number of an item in a page reference field and then output it as a value?
      So for example I want to automatically output the number 1 if the referenced page is the first in the list and have it be updated when the list is reordered via drag and drop.
      Thanks in advance!
×
×
  • Create New...