Jump to content
rjgamer

Hook current page got created

Recommended Posts

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.

 

Share this post


Link to post
Share on other sites
3 hours ago, monollonom said:

Have you tried with Pages::added ?

Sorry, I'm mean after a page load when the current page get fetched from the database. Page::added get called when I create a new page.

I've a use case where I want a run a method of my custom page class. But if I run the method in the constructor, not all properties of page are loaded (e.g. httpUrl). 

Share this post


Link to post
Share on other sites

I think I found it: Page::loaded

https://processwire.com/api/ref/page/loaded/

Edit: How do I check in a custom page class, if it is the current class? Maybe something like this:

namespace ProcessWire;

class DefaultPage extends Page {

   public function loaded(): {
      parent::loaded();

      if ($this->isCurrent) {
         // to my special custom super feature stuff
      }
   }

}

 

Share this post


Link to post
Share on other sites

I've never worked with custom page classes but I assume you could add a hook on the "loaded" event of your custom page and execute your custom function, something like :

$wire->addHookAfter("CustomPage::loaded", function($event) {
	$page = $event->object;
	$page->yourCustomPageFunction();
});

 

Share this post


Link to post
Share on other sites
20 hours ago, rjgamer said:

namespace ProcessWire; class DefaultPage extends Page { public function loaded(): { parent::loaded(); if ($this->isCurrent) { // to my special custom super feature stuff } } }

Are you sure you need to check? If you place a custom "loaded" method in your custom page class only pages using your custom page class will execute that code anyway... Or am I missing anything?

But if I'm missing anything checking for the current pageclass is as easy as this:

if($page instanceof self) { ... }

 

  • Like 1

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 Kiwi Chris
      I need to restrict editing access based on both the user role, and the value of a sub-field in a page reference field.
      eg $page->competition->closingDate 
      There's some discussion about restricting editing access based on role, and that works, but when I try to access the page via the method @Robin S suggests, the page returned is an admin page rather than the page being edited, so I don't have access to the edited page's fields.
       
    • 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!
       

×
×
  • Create New...