【问题标题】:Drupal 7, General question about themeingDrupal 7,关于主题的一般问题
【发布时间】:2011-08-25 11:56:12
【问题描述】:

我一直在做一场噩梦,试图理解 Drupal 的方式!我在这里有一个例子,如果有人可以向我展示实现我的结果的正确方法,我希望它能帮助我打开理解之门。

所以我正在尝试更改节点创建日期,使其看起来类似于堆栈溢出格式。例如。这是“X 小时前发布”或“8 月 17 日 12:22 发布”等。

我已经设法使用“node.tpl.php”文件创建了所需的效果。我已经使用节点变量“$created”和以下代码实现了这一点。

    $showCreate = round((time() - $created) / 60);
if ($showCreate < 60) {
    $showCreate = $showCreate . "mins ago." ;
} else {
    $showCreate = round($showCreate / 60);
    if ($showCreate > 24) {     
        $createMonth  = format_date($created, 'custom', 'M');
        $createDate   = format_date($created, 'custom', 'd');   
        $createTime   = format_date($created, 'custom', 'H:i');
        switch ($createDate) {
            case 1:
            case 21:
            case 31:
                $createDate = $createDate . "st";
                break;
            case 2:
            case 22:
                $createDate = $createDate . "nd";
                break;
            case 3:
            case 23:
                $createDate = $createDate . "rd";
                break;
            default:
                $createDate = $createDate . "th";
                break;
        }
        $showCreate = $createMonth . " " . $createDate . " at " . $createTime;
    } else {
        $showCreate = $showCreate . "hrs ago." ;    
    }
}

这是实现这一目标的“正确”方法吗?或者你会使用一些钩子和预处理函数吗?我更愿意将它封装到 MOdule 中,这样我就可以将它直接应用到我的其他 drupal 站点。

非常感谢。

【问题讨论】:

    标签: drupal drupal-7 drupal-modules drupal-themes


    【解决方案1】:

    在 Drupal 7 中有很多不同的方法可以做到这一点,我想这取决于你在做什么。

    如果您正在编写模块,那么您想使用hook_node_view 来更改呈现的内容。

    这是上面页面中的一些示例代码:

    function hook_node_view($node, $view_mode, $langcode) {
      $node->content['my_additional_field'] = array(
        '#markup' => $additional_field, 
        '#weight' => 10, 
        '#theme' => 'mymodule_my_additional_field',
      );
    }
    

    如果您正在编写主题,那么您想在主题的 template.php 文件中使用 hook_preprocess_node,如下所示:

    function mytheme_preprocess_node(&$vars) {
      $node = $vars['node'];
    
      $vars['my_created_date'] = my_date_extraction_function($node->created);
    }
    

    然后在您的 node.tpl.php 中,您将拥有可用的变量 $my_created_date,您可以使用它来代替原始创建日期。

    显然您可以在这里发挥您的想象力,您添加到 $vars 数组的任何内容都将在 node.tpl.php 中可用,并且您可以完全访问 mytheme_preprocess_node() 中的节点对象。

    如果您之前没有使用过 hook_node_view 或渲染 API,您可能会发现使用 preprocess_node 方法更容易,因为学习曲线更短。

    希望对您有所帮助。

    【讨论】:

    • 谢谢,这听起来很有帮助。直到下周才有机会运行它,但我很高兴尝试。干杯。
    • 嗨,我尝试了预处理方法,效果很好。感谢您的建议。将把钩子节点留到以后。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多