Jump to content

Hook on Templates::save and get affected Template

Recommended Posts

Hi there,

im a bit lost right now. I added an hook after templates::save which should get the affected template and write its template ID into a JSON.

The problem is, the event->object gives me an instance of the templates class. How can I narrow this down to the saved Template and get its ID and fieldgroup?

Share this post

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

Use $event->arguments(0);

Yeah, this did the trick... Thank you 🙂

My solution for what I needed this for:

public function templateSave($event){
        $templateId = $event->arguments(0)->id;
        $templates = $this->wire('templates');
        $template = $templates->get($templateId);
        $fieldgroup = $this->wire->fieldgroups->get($template->name);
        $data['name'] = $template->name;
        foreach($fieldgroup as $k => $v){
            $field = $this->wire('fields')->get($k);
            $data['fields'][] = ['name' => $field->name, 'id' => $k];
        $data = json_encode($data, JSON_PRETTY_PRINT);

        $file = $this->wire('config')->paths->root.'models/'. $template->name .'.json';
        file_put_contents($file, $data);

which would generate something like

    "name": "BaseController",
    "fields": [
            "name": "title",
            "id": 1
            "name": "ControllerEnvironment",
            "id": 219
            "name": "active",
            "id": 132
            "name": "accesspermissions",
            "id": 197
            "name": "accesspermission",
            "id": 196
            "name": "appcompanyname",
            "id": 125
            "name": "appuserreference",
            "id": 177
            "name": "appuserroles",
            "id": 186


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 a.masca
      Goodmorning everyone,
      sorry for the inconvenience but I have a problem that I can't find in any other post.
      Strange things happen on a site:
      - despite everything being configured correctly (as already done in dozens of other sites) only superusers can create new pages
      - if I insert in a selector "include = all" the result is always 0
      - I should restore a series of pages incorrectly inserted in the trash, but I cannot select them with the selector "status = Trash"
      Some idea?
      Thanks so much for your valuable support.
    • By LAPS
      According to this old post, I'm trying to use the PW cache feature:
      $my_page = $pages->get($pageId); if($my_page->viewable()) { $content = $cache->get("my_page"); if(!$content) { $content = renderCustom($my_page->children); $cache->save('my_page', $content, 3600); } echo $content; } function renderCustom(PageArray $items) { foreach($items as $item) { echo $item->title; // ... heavy content loading } } After loading the page which renders the above code, in the admin I can see something was cached (note: I'm using ClearCacheAdmin) :

      But when I reload the page the cached value seems do not be used and the page loads slowly.
      The result of doing var_dump() is the following:
      var_dump($cache); // return object(ProcessWire\WireCache)#20 (0) { } $content = $cache->get("my_page"); var_dump($content); // return string(0) ""  
      What could be the problem?
    • By LAPS
      Can you confirm that the function renderField for fieldset fields, even having the file /site/templates/fields/fieldName.php or /site/templates/fields/fieldName/$file.php (using $file argument), does not render anything as expected?
      $page->renderField('fieldsetName') // returns nothing ... or am I wrong on something?
    • By LAPS
      Hi there,
      I'm working on an email message template and would like to render a custom one to be sent.
      I tried to use $files->render() this way
      // rendering file e.g. a template file or a hook statement in ready.php $body = $files->render('emails/myfile', array( 'myVar1' => $var1, 'myVar2' => $var2, ... )); but $vars seems to be not accessible from within the rendered file. That is, $vars seems to be not set:
      // rendered file emails/myfile.php $myVar1 = $vars['myVar1']; // is not set $myVar2 = $vars['myVar2']; // is not set ... // is not set How can I get the $vars so to properly render the custom message template for sending the email?
      By using $files->include() the $vars is accessible but I cannot use this method because I should retrieve the output $body as a return value for sending the email later. So, I'm still looking to render the custom message using $files->render(). This thread is someway related to this one.
    • By Markus (Blue Tomato)
      I'am working on a migration script from the ImageExtra Module to the new Custom Image Fields feature in ProcessWire.
      I have some problems while setting a field value to the new custom image field. I have set up the custom field and it works correct in the admin panel but not via the API:
      $page->images->my_custom_image_field = "test"; $page->save(); Results into:
      Fatal error: Uncaught ProcessWire\WireException: Item 'my_custom_image_field' set to ProcessWire\Pageimages is not an allowed type in /var/www/html/wire/core/WireArray.php:458
  • Create New...