Drupal 7, Общий вопрос по тематике - PullRequest
0 голосов
/ 25 августа 2011

Мне снился кошмар, пытающийся понять путь Друпала!У меня есть пример, и если кто-то может показать мне правильный путь для достижения моего результата, я надеюсь, что это поможет мне открыть дверь для понимания.

Поэтому я пытаюсь изменить Дату создания Узла, чтобыПохоже на формат переполнения стека.Например: «Опубликовано x часов назад» или «Опубликовано 17 августа в 12:22» и т. Д.

Мне удалось создать нужный эффект, используя файл «node.tpl.php».Я добился этого, используя переменную узла «$ create» и следующий код.

    $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." ;    
    }
}

Это «правильный» способ добиться этого?или вы бы использовали некоторые из хуков и функций предварительной обработки?Я бы предпочел свернуть это в модуль, чтобы я мог применить его непосредственно к другим моим друпал сайтам.

Заранее большое спасибо.

1 Ответ

1 голос
/ 25 августа 2011

В 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',
  );
}

Если вы пишете тему, то вы хотите использовать hook_preprocess_node в файле template.php вашей темы, что-то вроде этого:

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, так как кривая обучения меньше.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...