• Drupal 自己定义主题实体 Theming Custom Entities


    在自己定义主题中输出结果时,有三个部分或很多其它特殊的函数。如 hook_menu,Page Callback。MODULE_theme 钩子

    1、hook_menu

    为了使用自己定义的实体。像创建、编辑、删除、查看实体的功能,就必须要创建一些 Menu path。这里创建、编辑、删除是与Drupal's Form API相关的,通过hook_menu,能够定义我们须要的路径来訪问这个新创建的实体内容

    function my_module_menu() {
    
      $items['my_entity/%my_entity'] = array(
    
        'title callback'   => 'my_entity_page_title',
    
        'title arguments'  => array(1),
    
        'page callback'    => 'my_entity_page_view',
    
        'page arguments'   => array(1),
    
        'access arguments' => array('view entities'),
    
        'type'             => MENU_CALLBACK,
    
      );
    
      return $items;
    
    }
    

    2、Page Callback

    在上面的样例中。我们在訪问这个路径时,定义了 page callback 相应的 my_entity_page_view 函数,因此,接下来就须要创建这个函数,例如以下

    /**
    
     * This is the callback we defined to be executed when a user
    
     * requests http://mysite.com/my_entity/1 (1 is just an example ID,
    
     * it could be anything). This function will set up the data and
    
     * prepare the render array(s). You will specify the template to
    
     * use in this callback. The critical thing to note below is the
    
     * order in which field_attach_prepare_view, entity_prepare_view
    
     * and field_attach_view are called. These functions must be called
    
     * in this order and they must be called before you specify which
    
     * theme to use.
    
     */
    
    function my_entity_page_view($entity, $view_mode='full') {
    
      $entity_type = $entity->entityType();
    
      $entity_id = entity_id($entity_type, $entity);
    
      //
    
      // Remove previously built content, if exists
    
      //
    
      $entity->content = array();
    
      $entity->title = filter_xss($entity->title);
    
      //
    
      // Build the fields content
    
      //
    
      field_attach_prepare_view($entity_type, array($entity_id => $entity), $view_mode);
    
      entity_prepare_view($entity_type, array($entity_id => $entity));
    
      $entity->content += field_attach_view($entity_type, $entity, $view_mode);
    
       // Specify the theme to use and set the #element. Note that the key
    
       // you use to pass the entity object must match the key you set in the
    
       // variables in my_module_theme(). So in the case below, we use the key
    
       // named #element because in my_module_theme() we set the following code:
    
       //
    
       // array(
    
       //   'my_entity' => array(
    
       //     'variables' => array('element' => null),
    
       //     'template' => 'my_entity'
    
       //   ),
    
       // );
    
       //
    
      $entity->content += array(
    
        '#theme'     => $entity_type,
    
        '#element'   => $entity,
    
        '#view_mode' => $view_mode,
    
        '#language'  => LANGUAGE_NONE,
    
      );
    
      return $entity->content;
    
    }
    

    3、MODULE_theme() Hook

    到眼下为止,为了这个实体我们已经定义了菜单项还有CALL BACK返回值,接下来。剩下的就须要创建一个指向模板的文件。看上面部分内容,能够看到内容为:

    $entity->content += array(
    
      '#theme' => 'my_entity'
    
    );
    
    
    意思是说。指向 my_entity ,那么,应该怎样定义呢?
    function my_module_theme($existing, $type, $theme, $path) {
    
      return array(
    
        'my_entity' => array(
    
          'variables' => array('element' => null),
    
          'template' => 'my_entity_template'
    
        ),
    
      );
    
    }
    

    4、依据第三部分的内容。我们则须要创建名为 my_entity_template.tpl.php 的模板文件

    [php
    
      // In a real module variables should be manipulated in a preprocess function.
    
      $content = $element->content;
    
    ]
    <div class="[php print $classes; ]">
    [php print render($content['title']); ]
    [php print render($content['field_date']); ]
     [php print render($content['field_author']);]
     [php print render($content['field_image']);]
    [php print render($content['field_description']);]

    原文链接:https://drupal.org/node/1238606

  • 相关阅读:
    文件系统类型
    Linux VFS分析(二)
    VFS(Virtual File System)
    shell语言
    linux VFS 之一 :虚拟文件系统的面向对象设计思想
    分层利器 facade
    微内核与面向组件
    从操作系统内核看设计模式--linux内核的facade模式
    软件架构模式
    联系的度量
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7080092.html
Copyright © 2020-2023  润新知