Drupal Views 2:使用自定义标记输出

时间:2010-12-06 20:14:45

标签: drupal drupal-views drupal-theming

我有一个简单的视图,抓取4个字段,基本上它抓取特定内容类型的字段。字段如下:
CSS类(纯文本)
图像(图像)
标题
身体

非常简单的东西。我已经创建了视图,但是我需要以专门的方式输出内容,并且我无法确定这些内容是如何与我的构建中的自定义标记一起分解的。我需要将每一行包装在一个容器中,每行分解成它自己的容器,看看下面的代码。

   <div id="homepage-folio-portlets">
    <div class="homepage-folio-portlet [CSS class]">
     <div class="homepage-folio-portlet-image"><img src="[Image]" width="450" height="330" alt="" class="[CSS class]-image" /></div>
     <div class="homepage-folio-portlet-text">
      <strong>[Title]</strong>
      <p>[Body]</p>
     </div>
    </div> <!-- /homepage-folio-portlet -->
   </div> <!-- /homepage-folio-portlets -->

所以我有一个容器, homepage-folio-portlets ,其中我想迭代视图使用类 homepage-folio-portlet <创建一个新容器/ em>返回的每一行,包括行中的CSS类。

我最大的障碍是弄清楚如何在template.php中构建我的.tpl文件或主题函数。我理解命名惯例,但一旦进入内部,我真的不知道该怎么做。我有一种感觉,我需要在template.php中做一点魔术,以确保我的行输出从内容中知道CSS类,但谁知道。任何帮助和指导都表示赞赏。

3 个答案:

答案 0 :(得分:3)

在观察上述video之后,如何完成我的目标变得更加清晰。最大的“啊哈”是由于foreach循环,“行样式输出”模板的默认代码让我感到困惑。我没有意识到我可以在没有循环的情况下以我认为合适的方式输出每个字段。该视频展示了如何使用以下简写字段['ID-of-field'] - &gt;内容单独引用您的字段。要获得“字段ID”,请滚动浏览特定视图的“主题信息”选项窗格中的“显示输出”,“样式输出”和“行样式输出”链接。

我使用了在我的视图的编辑屏幕中找到的“主题信息”来确定用于创建和创建它的“行样式输出”的最具体的.tpl,在本例中是view-view-fields - my-view -name - default.tpl.php

view-view-fields - my-view-name - default.tpl.php - 行输出.tpl文件
(不再使用默认的foreach,因为不是在字段上循环我知道我想要的字段而且我可以简单地输出它们,无论如何我觉得合适)

   <div id="homepage-folio-portlets">
    <div class="homepage-folio-portlet <?php print $fields['CSS_class']->content ?>">
     <div class="homepage-folio-portlet-image"><img src="<?php print $fields['Image']->content ?>" width="450" height="330" alt="" class="<?php print $fields['CSS_class']->content ?>-image" /></div>
     <div class="homepage-folio-portlet-text">
      <strong><?php print $fields['Title']->content ?></strong>
      <p><?php print $fields['Body']->content ?></p>
     </div>
    </div> <!-- /homepage-folio-portlet -->
   </div> <!-- /homepage-folio-portlets -->

之后,我对“样式输出”和“显示输出”.tpl文件做了一点递归,以摆脱Drupal添加的所有额外标记。请注意,我真正关心的是打印出$ row(带有它的foreach循环)样式.tpl和显示tpl中的$ rows。它正在输出我想要的东西,我不能更开心。最后,这是有道理的。希望这有助于其他人。

仅供参考......

views-view-unformatted - my-view-name - default.tpl.php - 样式.tpl文件
(希望将foreach循环保留在此处,以便每行输出)

<?php foreach ($rows as $id => $row): ?>
 <?php print $row; ?>
<?php endforeach; ?>

views-view - my-view-name - default.tpl.php - 显示.tpl文件

<?php print $rows; ?>

通过删除所有额外的标记,我正在丢失特定于管理链接等视图的重要内容,但出于我的目的,这很好。

答案 1 :(得分:1)

在视图的“编辑”选项卡上的“基本设置”下,查找“主题:”,然后单击“信息”链接。然后在“默认:主题信息”部分中,粗体文件名是当前用于主题该视图的特定子部分的文件名。其他名称是“建议”,可用于覆盖默认值,并且从最不具体到最具体的顺序排序。

在你的情况下,开始时,听起来你想要覆盖“行样式输出”:

  1. 点击“行样式输出”链接,复制默认模板代码。
  2. 根据您是否希望将此样式用于所有视图,此视图,此视图的特定显示等,选择一个建议用于行样式的文件名。
  3. 将步骤1中复制的代码粘贴到步骤2中选择的文件名
  4. 根据需要编辑代码,添加特定类
  5. 单击“重新扫描模板文件”以重建模板缓存
  6. 对要自定义的任何其他子模板重复步骤1-5。

答案 2 :(得分:0)

您是否尝试过将模板文件用于行?您应该在views模块中(在管理员中)看到它。在创建视图时,单击左侧下方框中的“信息”。您需要刷新模板缓存(您将看到一个按钮来执行此操作)。