跳转到主要内容
catherina 提交于 3 September 2015

原文链接:http://drupal.org/node/1128278

创建于2011年4月15日,最后更新2011年4月24日

Izus,jin2 编辑

主题:区块(block)系统,渲染数组(Render array),菜单系统 主要方法:drupal_set_title

随着上次我们致力于对区块系统、渲染数组(Render array)、菜单系统而添加的模块,也抛出了关于当前drupal7版本存在的小问题的一个解决方案。

有时候可能你访问的一个页面不属于“导航(Navigation)”菜单,而是通过“Current posts”的区块底部的“更多(More)”链接显示的。这就是今天主题计划,让我们从一个菜单连接开始展示这是如何实现的。

如果你想要用Default theme implementations 实现后台Generating block content,那么或许你已经注意到 theme_more_link这个主题钩子。我们将用一个属于主题钩子建议来完成我们今天主题“更多”连接的区块。

输出子元素 我们从改变回调函数theme_item_list来开始,作为我们在一个页面里的渲染数组(Render array)方法。我们还要做一个['内容'](Content)区块的子区块,作为“更多”连接的同级。下面current_posts_block_view的最后修改的一部分代码 <?php else {   //Pass data through theme function.   $block['content']['posts'] = array(     '#theme' => 'item_list__current_posts__block',     '#items' => $items,   ); ?> 切记你的代码里边不用PHP标记。

我们修改项目列表代码$block['content']['posts'],给它一个子元素,你可以把它命名成任何一个除了以(#)开头的你想得到的名字。我们通过修改回调函数thme_item_list来渲染输出,然后添加__current_posts 主题钩子建议。这是我们需要遵从的第二个建议,以防主题里输出的区块和页面输出不一致。 下面是”更多“连接的新代码,直接跟在上一段列表后边。 <?php   //Add a link to the page for more entries.   $block['content']['more'] = array(     '#theme' => 'more_link__current_posts',     '#url' => 'current_posts',     '#title' => t('See the full list of current posts.'),   ); } ?> 我们做了一个和”更多“连接同级的posts数组,并且提供了两个参数来瞒住主题钩子的要求,标题提供的文本形成了鼠标在标题上方时的提示信息,我们很好的遵从了主题钩子的建议。

编辑current_posts_menu() 有一点,在我们的块和‘导航菜单’上都要”更多“连接。但我们不希望在菜单中有连接,所以我们要修改current_posts_menu()将连接取消。所以你需要做的就是修改页面项目的类型属性。删除MENU_NORMAL_ITEM并将其替换成MENU_CALLBACK。这个类型提供了一个路径和属性,没有菜单连接。如果你的模块一启用,你需要禁用后在启用以便使修改的内容生效。

页面标题修订 启用模块同时在区块中有了”更多”连接,然后记下该页面的标题。“首页”?这不是我们的本意,这时由于drupal7的第一版本引起的错误,(如果你看到的是当前位置的标题,那你使用的是本文发表之后的版本)有一个补丁,但需要我们为当前我们版本的代码。即使错误是固定的,但是我们不能确保我们的模块不会被用在一个刚安装并且没有跟新的的版本上。 解决方案是使用drupal_set_title()方法。下面是添加到你的_current_posts_page() 函数的代码:

<?php   drupal_set_title('Current posts'); ?> 除此之外,还可以确保正确的标题将出现在页面上,无论在哪个drupal7版本的上安装模块。 检查 最后,检查模块的功能。如归你一直跟着做,最后要检查的是改正页面标题“Current posts”。如果你的代码添加出现问题,尝试清楚缓存或者禁用后重新启用你的模块。 查看代码 你可以查看所有的代码,在current_posts.module的.modulle文件类型的文件里。 你也可以参照 Examples for developers,区块,菜单和页面实例(如果你没有看到drupal7 下载发布,gitkelp克隆大师的最后一个版本)