美文网首页drupal
drupal8 - 自定义theme工作流程

drupal8 - 自定义theme工作流程

作者: AnnaJIAN | 来源:发表于2019-06-22 23:26 被阅读0次

    模板引擎改为 Twig 使模板创建更简单,更安全。
    调试工具:
    DEVEL KNIT
    sites/default/services.yml

    twig.config:
        debug: true
    
    自定义theme是如何工作的。

    routing 找到controller,controller函数return数组,里面有'#type' => 'my_element', 就会找到my_element

    return [
          'example one' => [
            '#type' => 'my_element',
            '#description' => $this->t('This is the description text one.'),
            '#attached' => [
              'library' => [
                'theme_example/sample_library',
              ],
            ],
          ],
    
    class MyElement extends RenderElement {
      /**
       * {@inheritdoc}
       */
      public function getInfo() {
        $class = get_class($this);
        return [
          '#theme' => 'my_element',
          '#label' => 'Default Label',
          '#description' => 'Default Description',
          '#pre_render' => [
            [$class, 'preRenderMyElement'],
          ],
        ];
      }
    

    my_element是个theme ,去找到hook_theme

    /**
     * Implements hook_theme().
     */
    function theme_example_theme() {
      $items = [
        'my_element' => [
          'render element' => 'element',
        ],
      ];
      return $items;
    }
    

    render的时候发现有preRender,preRenderMyElement 定义element参数值。

      public static function preRenderMyElement($element) {
          $element['description'] = [
             '#markup' => $element['#description']
          ];
        return $element;
      }
    }
    

    如果此时还有preprocess之类的也会先执行。
    完成之后,theme elment 按照twig的样子打印出结果。

    <div>
      <div>Random Number: {{ element['#random_number'] }}</div>
      <p>{{ element.description }}</p>
      {{ element.link }}
    </div>
    

    其中library,css,js需要先定义theme_example.libraries.yml, 调用的地方type和attached一起才生效。

    sample_library:
      css:
        theme:
          css/example.css: {}
      js:
        js/example.js: {}
      dependencies:
        # jQuery is not included by default, so we add it as a dependency
        - core/jquery
        # We are also going to use jQuery.once so that code doesn't trigger multiple times.
        - core/jquery.once
        # drupal and drupalSettings are not included by default either.
        - core/drupal
    

    相关文章

      网友评论

        本文标题:drupal8 - 自定义theme工作流程

        本文链接:https://www.haomeiwen.com/subject/yjqbqctx.html