代码之家  ›  专栏  ›  技术社区  ›  Steve Perks

如何更改Drupal5视图模块的HTML

  •  1
  • Steve Perks  · 技术社区  · 17 年前

    我使用的是Drupal5,有很多视图需要修改它的输出。使用视图向导,我可以为每个实例创建不同的模板,但我希望对所有视图进行相同的更改,并且在themes目录中有30个文件,这需要大量的维护和代码。有没有人知道是否有一种默认方法可以同时处理所有视图,然后一次性使用我目前拥有的内容?

    views-list-home\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

    <?php 
    /**
     * views template to output one 'row' of a view.
     * This code was generated by the views theming wizard
     * Date: November 17, 2008 - 2:07pm
     * View: home_articles_latest
     *
     * Variables available:
     * $view -- the entire view object. Important parts of this object are
     *   home_articles_latest, .
     * $view_type -- The type of the view. Probably 'page' or 'block' but could
     *   also be 'embed' or other string passed in from a custom view creator.
     * $node -- the raw data. This is not a real node object, but will contain
     *   the nid as well as other support fields that might be necessary.
     * $count -- the current row in the view (not TOTAL but for this page) starting
     *   from 0.
     * $stripe -- 'odd' or 'even', alternating. * $title -- Display the title of the node.
     * $title_label -- The assigned label for $title
     * $comment_count -- This will display the comment count.
     * $comment_count_label -- The assigned label for $comment_count
     * $field_abstract_value -- 
     * $field_abstract_value_label -- The assigned label for $field_abstract_value
     *
     * This function goes in your views-list-home_articles_latest.tpl.php file
     */
    
    
     //now we add the stylesheet...
     //drupal_add_css(path_to_theme() .'/views-list-home_articles_latest.css');
    
      ?>
      <?php print $view ?>
    <div class="view-label view-field-title">
      <?php print $title_label ?>
    </div>
    <div class="view-field view-data-title">
      <?php print $title?>
    </div>
    
    <?php if ($comment_count != '0' && $view_type == 'block'): ?>
    <div class="view-label view-field-comment-count">
      <?php print $comment_count_label ?>
    </div>
    <div class="view-field view-data-comment-count">
      <?php print $add?><?php print $comment_count?>
    </div>
    <?php endif; ?>
    
    <?php if ($count == 0): ?>
    <div class="view-label view-field-field-abstract-value">
      <?php print $field_abstract_value_label ?>
    </div>
    <div class="view-field view-data-field-abstract-value">
      <?php print $field_abstract_value?>
    </div>
    <?php endif; ?>
    

    在template.php中

    /**
     * views template to output a view.
     * This code was generated by the views theming wizard
     * Date: November 17, 2008 - 2:07pm
     * View: home_articles_latest
     *
     * This function goes in your template.php file
     */
    function phptemplate_views_view_list_home_articles_latest($view, $nodes, $type) {
      $fields = _views_get_fields();
    
      $taken = array();
    
      // Set up the fields in nicely named chunks.
      foreach ($view->field as $id => $field) {
        $field_name = $field['field'];
        if (isset($taken[$field_name])) {
          $field_name = $field['queryname'];
        }
        $taken[$field_name] = true;
        $field_names[$id] = $field_name;
      }
    
      // Set up some variables that won't change.
      $base_vars = array(
        'view' => $view,
        'view_type' => $type,
      );
    
      foreach ($nodes as $i => $node) {
        $vars = $base_vars;
        $vars['node'] = $node;
        $vars['count'] = $i;
        $vars['stripe'] = $i % 2 ? 'even' : 'odd';
        foreach ($view->field as $id => $field) {
          $name = $field_names[$id];
          $vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
          if (isset($field['label'])) {
            $vars[$name . '_label'] = $field['label'];
          }
        }
        $items[] = _phptemplate_callback('views-list-home_articles_latest', $vars);
      }
      if ($items) {
        return theme('item_list', $items);
      }
    }
    

    谢谢
    史蒂夫

    3 回复  |  直到 16 年前
        1
  •  2
  •   Eli    17 年前

    我 认为

    否则,可能有一种方法可以使用主题函数获得您想要的内容。

        2
  •  0
  •   acrosman    17 年前

    我相信,如果您讨论的是视图模板中发生的事情,那么每个模板都必须独立更新。我不知道如何只更新n个视图中的一小部分。

    如果在每个视图的模板上方都有一个标题,那么可以使用template.php中的helper函数或node.tpl.php中的conditional函数来完成。但如果它比这更深入,我相信你运气不好。

        3
  •  0
  •   Eaton    17 年前

    在视图5中,默认情况下模块无法公开tpl文件,因此模板名称对您没有任何帮助。关键是放在template.php文件“phptemplate\u views\u view\u list\u home\u articles\u latest”中的函数。这是一个PHP函数,用于拦截任何名为“home\u articles\u latest”的列表视图的呈现。如果希望它拦截所有视图,只需将函数本身的名称更改为:“phptemplate\u views\u view”

    请记住,这会影响一切——使用视图、RSS提要等构建边栏块。

    推荐文章