Timber - Используйте для рендеринга шаблонов плагинов. - PullRequest
0 голосов
/ 08 марта 2019

Я создаю плагин, который напрямую связан с темой, которую я разрабатываю, которая использует Timber. Мой плагин может отображать некоторые встроенные шаблоны (когда я вызываю шорткод, плагин отвечает с правильным teplate); Эти шаблоны на данный момент являются файлами PHP. Я бы использовал Timber для рендеринга этих файлов.

К сожалению, выпуск # 261 все еще открыт. И я понятия не имею, как мне получить ожидаемое поведение на текущей базе кодов древесины.

Ожидаемое поведение:

  • Зарегистрируйте мой путь к плагину для просмотров после пути к теме.
  • Когда вызывается представление, Timber сначала проверяет каталог тем, а не плагин.

Как я могу получить это? Сейчас я проверил шаблоны моей темы и просто позвонил Timber.render();, но у меня не включен локальный путь.

Стандартный код плагина PHP:

// On plugin load
add_shortcode('render_social_icons', array($this, 'render_social_icons'));

public function render_social_icons($atts, $content)
    {
        $atts = shortcode_atts(array(
            'class' => '',
            'el-class' => '',
            'link-class' => '',
            'icon-class' => '',
            'size' => '',
        ), $atts);

        ob_start();
        ?>

        <ul class="social-icons shortcode <?php echo $atts['class']; ?>">
            <?php
            $socials = my_socials_links();
            foreach ($socials as $social) :?>
                <?php
                $id = $social['id'];
                $title = $social['name'];
                $baseurl = $social['baseurl'];
                $icon = $social['icon'];

                $social_data = get_theme_mod($id);
                if (!empty($social_data)) :?>
                    <li class="<?php echo $id; ?> <?php echo $atts['el-class']; ?>">
                        <a target="_blank" title="<?php echo $title; ?>" href="<?php printf($baseurl, $social_data); ?>"
                           class="<?php echo $atts['link-class']; ?>">
                            <i class="<?php echo $icon; ?> <?php echo $atts['icon-class']; ?> <?php echo $atts['size']; ?>"></i>
                        </a>
                    </li>
                <?php endif; ?>
            <?php endforeach; ?>
        </ul>

        <?php
        return ob_get_clean();
    }

Преобразованная функция для Timber (все еще файл плагина):

// On plugin load
add_shortcode('render_social_icons', array($this, 'render_social_icons'));

public function render_social_icons($atts, $content)
    {

        $atts = shortcode_atts(array(
            'class' => '',
            'el-class' => '',
            'link-class' => '',
            'icon-class' => '',
            'size' => '',
        ), $atts);

        return Timber.compile('shortcodes/social.twig', array(atts, my_socials_links());
    }

shortcodes/social.twig находится в папке текущей темы, я хотел бы загрузить этот файл шаблона ветки из плагина плагинов.

1 Ответ

0 голосов
/ 22 марта 2019

Древесина не требует, чтобы вы зарегистрировали файл ветки, чтобы использовать его с Timber::compile. Вам просто нужно указать полный путь к файлу в качестве первого аргумента. Чтобы сделать это в плагине, вам нужно получить путь к каталогу плагина, используя plugin_dir_path(). Чтобы использовать пример кода, вы должны сделать что-то вроде следующего.

public function render_social_icons($atts, $content) {
  $plugin_path = plugin_dir_path( __FILE__ );
  $atts = shortcode_atts(array(
          'class' => '',
          'el-class' => '',
          'link-class' => '',
          'icon-class' => '',
          'size' => '',
        ), $atts);

   return Timber::compile($plugin_dir_path . '/twig/social.twig', $atts);
}

Крутая вещь в Timber::compile заключается в том, что вы можете передать массив путей, и Timber будет использовать первый найденный файл. Это означает, что вы можете разрешить теме переопределять местоположение файла social.twig файлом в зарегистрированных путях Timber. Например, вы можете изменить последнюю строку на:

return Timber::compile(array('social-shortcode-custom.twig', $plugin_dir_path . '/twig/social.twig'), $atts);

Затем Timber передает переменные в файл с именем social-shortcode-custom.twig в зарегистрированных местоположениях Timber, если он существует, и возвращается к файлу, расположенному в плагине, если нет.

Я не уверен, влияет ли это на вещи или нет, но я не распознаю синтаксис, который вы используете для функции компиляции. Я всегда видел и использовал статический метод Timber::compile(), но вы используете Timber.compile(). Timber в последнее время быстро обновляется, так что, может быть, вы видели что-то, что я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...