Jump to content

How to hook into PageTable field on save of modal


alexcapes
 Share

Recommended Posts

Hi,

I've created a simple module that does the following:

  • Checks if a checkbox is ticked ('media_wall_quote_hero') on a page using the template 'media_wall_quote'.
  • If that checkbox is ticked, it adds that page to a PageTable field ('quotes_hero') located on the 'home' template.
  • If it's not checked and the page is in the PageTable field it is removed.

It all works correctly when checking/unchecking the box on pages using the 'media_wall_quote' template in admin.

However, if I edit the pages in the PageTable field itself on the homepage in admin, when I save the modal, the PageTable field is not updated. Strangely if I uncheck it (ie. when it should be removed) the PageTable field says 'item added'.

Is there a way I can hook into the PageTable field when the modal is saved and update it so if I check/uncheck the box it does the correct action? 

public function init() {
    $this->pages->addHookAfter('save', $this, 'AddRemoveHeroQuotes');
  }

  public function AddRemoveHeroQuotes($event) {
    $page = $event->arguments(0);

    if($page->template == 'media_wall_quote') {

      $home = wire('pages')->get(1);
      $home->of(false);

      $work_page = wire('pages')->get("template=work, media_wall_work=$page");

      // If this quote is a (published) hero quote add it to the pagetable field
      if($page->media_wall_quote_hero == 1 && !$page->is(Page::statusUnpublished)) {

        if(!$home->quotes_hero->has($page)) {
          $home->quotes_hero->add($page);
        }
      }
      // If this quote is a not a hero quote or is unpublished remove if from the pagetable field
      elseif($page->template == 'media_wall_quote' && $page->media_wall_quote_hero == 0 || $page->template == 'media_wall_quote' && $page->is(Page::statusUnpublished)) {

        if($home->quotes_hero->has($page)) {
          $home->quotes_hero->remove($page);
          $this->message('removed');
        }
      }
      $home->save('quotes_hero');
    }
  }

 

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.
  • Similar Content

    • By daniel_puehringer
      Hi community,

      I am using the "PageTable" Module (also called "ProFields: Page Table") and the built in "Language" Module (also called "Languages Support").

      With the help of PageTable I was able to create several content elements which should usually be displayed in German(default language) and English.

      However some Content Elements should only be shown in German and NOT in English.

      Well sounds easy, right? Not so fast. I really love this CMS, but I have not found a solution for this problem yet.
      As you can see in the screenshots attached I tried to uncheck the "active" Checkbox for the english language to completely hide the content element for english users.

      However no matter what I do the german text shows on the english page.
      If I leave the "content-should-not-be-shown-in-english"(see Screenshot Number 2) blank and save the page, the page will inherit the german page url "content-element-with-simple-text-which-should-only-be-shown-in-german".

      My question therefore is:
      How can I hide a specific content-element for only one language?

      I´m using the latest processwire & module versions.

      The code which I use to render the content elements looks like this:
      //Info: contentelements is a field of type "ProFields: Page Table" <?php foreach ($page->contentelements as $element): echo($element->render()); endforeach; ?> filename: basic-page.php


      I would really appreciate your help since I haven´t found a solution after reading through quite a lot of forum posts.

      All the best,
      Dani


    • 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 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 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 LAPS
      I opened a new wishlist topic on the PW forum for this and in the meantime I ask to the community looking for a reasonable solution.
       
      Using the PageTable field, is there a way to un-restrict the creation of pages under a given parent template page (or as page children if no parent for items is selected)? That is, is there a way to allow the selection of the parent page dynamically / on the fly during page creation via the PageTable field?
×
×
  • Create New...