Can't change template of file in file.create:after hook

I am having the same problem as described here, but I definitely need to change the template in the create:after not in the update:after hook.

I can change the template in the update hook, so this works:

'file.update:after' => function(Kirby\Cms\File $newFile, Kirby\Cms\File $oldFile){
        'template' => 'video',
        'text' => 'videoxxx'

the exact same code doesn’t work in the create after hook:

'file.create:after' => function(Kirby\Cms\File $file){
        'template' => 'video',
        'text' => 'video'

The update of the text field is working, I can see the ‘video’ text in the field, the template somehow does not work…this confuses me, please help <3

Kirby version: 3.9.1
Also there are no other file hooks involved that could override it on my end.

Cheers, Joscha

Is yours a multi-language site like in the thread you linked to?

Yes, and I also tried to loop through the languages with the same outcome.

okay so I now had the time to recreate this in a clean Kirby installation.
It works as long as there is just one language. But in a multilang setup changing the template inside the hook doesn’t work anymore. Should I submit an issue for this?

this is the code:

  'hooks' => [
      'file.create:after' => function (Kirby\Cms\File $file) {
          foreach (kirby()->languages() as $lang) {
            $file = $file->update([
              'template' => $file->type(),
              'text' => 'test',
            ], $lang->code());

again: 'text' => 'test' works. Just the template won’t work…

Try using $file->save() | Kirby CMS instead.

changes nothing unfortunately…

if it helps, here is the setup for quick reproduction.

The hook is inside a plug-in: site/plugins/change-file-template/

Thanks, yes, it just doesn’t work as expected.

Just for reference, there’s also another topic about this problem here.

ah right, didn’t see that, thanks!

1 Like

This issue fixed and will be released 3.9.2 version.