Jump to content
louisstephens

[SOLVED] Passing "parent page" to page creation via api

Recommended Posts

I am wondering, how do you pass a variable into wire('page')->get() inside a function? I have been looking through the forums, but unfortunately I have not found the answer yet.

My current set up is:

function generateNewPages($parentPageName) {
    $p = new Page();
    $p->template = "parent";
    $p->parent = wire('pages')->get('/home/');
    $p->name = $parentPageName;
    $p->title = $parentPageName;
    $p->of(false);
    $p->save();

    $p2 = new Page();
    $p2->template = "child";
    $p2->parent = wire('pages')->get('$parentPageName');
    $p2->name = "child";
    $p2->title = "Child Page";
    $p2->of(false);
    $p2->save();
}

When I try to run it by passing in a title like generateNewPages('Demo');, "Demo" is created, but when it gets to the child page I get:

Unknown Selector operator: '$' -- was your selector value properly escaped?

Is there a way to pass the $parentPageName to "wire('pages')->get('$parentPageName')" ?

Share this post


Link to post
Share on other sites
13 minutes ago, louisstephens said:

Is there a way to pass the $parentPageName to "wire('pages')->get('$parentPageName')" ?

Use double quotes!

  • Like 2

Share this post


Link to post
Share on other sites
1 minute ago, elabx said:

Use double quotes!

Or no quotes at all 🙂

Share this post


Link to post
Share on other sites
Just now, kongondo said:

Or remove them. You don't need them in this case 🙂

Thanks everyone for the quick responses. Unfortunately when I do:

    $p2->parent = wire('pages')->get($parentPageName);

I get the following:

Exception: Unknown Selector operator: '' -- was your selector value properly escaped? (in MAMP/htdocs/development/pw/wire/core/Selectors.php line 378)

Im a little baffled as I thought it would work without the quotes as I dont see any glaring errors in Visual Studio Code.

Share this post


Link to post
Share on other sites

Yeah, go with:

$p2->parent = $p

so that you are referencing the page. Otherwise you are trying to find a page by name which actually doesn't work like that.

  • Like 2

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 rjgamer
      Hi,
      is there a hook after the current (active) page got created? Or which method got called in the Page class after the Constructor of the current page got initialized?
      Thanks.
       
    • By killedfriendz
      I am very sorry for asking this but i totally do not understand how to set values of checbox using API. 
      I have checbox field on my page with name "order_status". 
      So i've tried few ways to make it checked but it still doesn't work:
       
      $userPage->order_status->value = 1; $userPage->order_status->add(1); $userPage->order_status->add(true); Could you please tell me how to do it?
    • By rjgamer
      Hi guys,
      the field "redirect_last" of type DateTime got not updated. The update on the field "redirect_counter" works and got saved.
      Does anybody know what I did wrong in my code?
      if ($input->urlSegment(1) === 'redirect') { $page->of(false); $page->redirect_last = time(); $page->redirect_counter += 1; if ($page->save('redirect_counter')) { $session->redirect($page->website_url, 302); } } Thanks.
    • By totoff
      Dear all,
      I'm upgrading an older side with the new custom fields for images feature as of 3.0.142. My image field is set to "Automatic" and holds a bunch of images together with their respective description on each page. New custom fields include "caption" among others and to make my live easier I I'm trying to populate "caption" with the value from the (default) description field. But unfortunately I can't seem to find out how to save the newly set values. This is my code:
      <?php foreach (page()->images as $image) { $image->set('caption', $image->description); bd($image->caption); echo files()->render("markup/views/view-card-image-fancybox.php", array('image'=>$image)); } ?> <?php $page->save(); bd($page->save()); ?> This sets the value as intended (see screenshot) but doesn't save it permanently to the database. What am I doing wrong?
      Thanks!
       

    • By SwimToWin
      As an admin I want to use the API to ask if a page is published - using the $page->isPublished() method - so that I know it's published - as opposed to unpublished or trashed pages. That includes hidden pages.
      This method will correspond to Settings -> Status when editing pages:

      (Published is also mentioned explicitly where the edit page says "Published on [?]".)
      I would expect the API - and specifically the $page->hasStatus() method - to ask if a page has status published.
      But as I can see, it's only possible to ask for exceptions such as isUnpublished() and isHidden().
      <?php // This fails with "Fatal Error: Uncaught Error: Undefined class constant 'statusPublished'" if($page->hasStatus(Page::statusPublished)) { echo 1; } ?> PS: My current use case is that I want to count number of published vs. unpublished pages. I can only do that by getting all pages (include=all), then subtract any unpublished pages.
×
×
  • Create New...