Не работает extends в pdoTools + Fenom

Привет.

Обычно я разбираюсь в проблеме сам, так как большую часть времени эти проблемы сам себе и создаю неправильным углом налона рук в момент работы. Проще говоря, иногда торчат из задницы. Но видимо не в этот раз.

Второй вечер подряд пытаюсь решить проблему с намертво падающим php при попытке использовать механизм наследования Fenom в pdoTools.



Пример до безобразия простой.

Создаем шаблон layout с таким содержимым:

<!doctype html>
<html lang="ru">
    <head>
        {block 'meta'}
        
        {/block}
    </head>
    <body>
        <div class="wrapper">
            {block 'header'}
            
            {/block}
                
            {block 'wrapper'}
            
            {/block}
            
            {block 'footer'}
        
            {/block}
        </div><!--/wrapper-->
        
        {block 'scripts'}
        
        {/block}
    </body>
</html>

После этого создаем шаблон main для главной страницы и пишем там:

{extends 'template:layout'}

Все просто и как в документации.

Затем назначаем единственной странице шаблон main и пробуем открыть в брайзере и видим 502 Bad Gateway.

Я думал, это у меня сервер криво настроен, но на modhost.pro такая же фигня — s3509.h2.modhost.pro/.

Вот доступы на тестовый сайт.
s3509.h2.modhost.pro/manager/
s3509
nxV158wxbtul

У меня при попытке открыть страницу команда tail -f /var/log/syslog показывает, что php фулится капитально, прям segfault.

Nov 15 22:36:22 alroniks kernel: [723273.262036] php5-fpm[17569]: segfault at 7ffdddc22ff8 ip 00000000006b3d45 sp 00007ffdddc23000 error 6 in php5-fpm[400000+7d8000]

P.S. В логих modx/php соответственно тишина, так как php падает не успев туда даже что-то записать.
Іван Клімчук
15 ноября 2015, 19:36
modx.pro
1
3 573
+1

Комментарии: 13

Виталий Серый
16 ноября 2015, 00:15
0
Тоже сталкивался, но вместо extends, если расширять нечего, использую include.
    Іван Клімчук
    16 ноября 2015, 02:49
    0
    от include толку мало, тоже самое что [[$chunk]] написать, разве что чуть быстрее работать будет. Нужно именно наследование.
      Василий Наумкин
      16 ноября 2015, 06:07
      0
      Ну так ты расширь что-нибудь. Например, вот так сразу работает:
      {extends 'template:layout'}
      
      {block 'wrapper'}
          1111  
      {/block}

      Все просто и как в документации.
      В документации, всё-таки, рабочий пример, который действительно расширяет шаблон.
        Іван Клімчук
        16 ноября 2015, 10:11
        0
        Т.е. если есть блоки в родительском и ни один не переопределен, то получается такая вот проблема. За фикс спасибо, но я думаю можно это как-то исправить.

        Вчера поздно было и уже не стал глубоко копаться в исходниках.
          Василий Наумкин
          16 ноября 2015, 10:20
          0
          Я думаю, что расширяющий шаблон должен что-то расширять, иначе зачем он нужен?

          Почему так, а не иначе, можно спросить в репозитории Fenom.
            Іван Клімчук
            16 ноября 2015, 10:23
            0
            Ну это понятно, что должен расширять. Но по той же логике наследования, ты же можешь создать класс, унаследованный от базового, но при этой пока не переопределять методы. Т.е. приложение спроектировано, но отдельные моменты еще не реализованы. Либо замоканы либо наследуют родительское поведение. В ООП только интерфейс требует обяательной имплементации описанных сигнатур, в случае наследования от класса (даже асбтрактного) это не требуется.
              Василий Наумкин
              16 ноября 2015, 10:26
              1
              0
              {extends 'template:layout'}
              
              {block 'wrapper'}
               	<!-- здесь будет расширение -->
              {/block}
              Не проверял, но уверен, что сработает.
                Іван Клімчук
                16 ноября 2015, 10:29
                0
                Работает. Нужно, видимо, в документацию добавить этот ньюанс, сейчас сделаю PR.
                  Денис
                  15 марта 2016, 13:13
                  0
                  Василий, подскажи пожалуйста, можно ли extends| include| insert статичные файлы, которые лежат в папке /assets/elements/… Если можно, то как это сделать?
                  Спасибо.
                    Василий Наумкин
                    15 марта 2016, 13:21
                    +1
                    Нет, в механизме расширений всё пока завязано на чанки и шаблоны.

                    Может, дойдут руки и для файлов прописать.
                      Pavel
                      16 сентября 2018, 17:05
                      0
                      Василий приветствую! интересует, могу ли я при расширении шаблона передать что нибудь в него? конкретно интересует передача класса для body. Я, конечно, понимаю, что можно значение класса обернуть в {block} — но может можно передавать в extends как это сделано в чанках? Спасибо!
                        Алексей Шумаев
                        16 сентября 2018, 22:44
                        0
                        Если я верно понял вопрос…
                        Переменные передаются.
                        Например определяем переменную {var $docid = $_modx->resource.id} в шаблоне, и эта переменная $docid доступна в расширении.
                        Если в расширении будет вставка файлового элемента, например:
                        {include 'file:templates/page.tpl'}, то $docid будет доступна и там.
                        Удобно, однако.
                        Pavel
                        17 сентября 2018, 01:11
                        0
                        немного неправильно поняли. Есть шаблон `base` и шаблон `home` в шаблоне home пишем {extends 'template:base'} и напимер {var $doc = $_modx->resource.id} — в шаблоне base мы хотим получить $doc — но так не работает…
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    13