Самый простой способ, это в template.php
добавить функцию предварительной обработки страницы:
/**
* Preprocess function for page.tpl.php
*/
function phptemplate_preprocess_page(&$vars) {
$vars['content'] = '<h1>Новый заголовок</h1>' . $vars['content'];
}
Если же переменную нужно изменить в своём модуле, то префикс phptemplate
заменяется на имя модуля:
/**
* Preprocess function for page.tpl.php
*/
function MODULENAME_preprocess_page(&$vars) {
$vars['content'] = '<h1>Новый заголовок</h1>' . $vars['content'];
}
А вот так можно изменить контент только на определённой странице, в данном случае — на странице таксономии (taxonomy/term/[tid]
):
/**
* Preprocess function for page.tpl.php
*/
function MODULENAME_preprocess_page(&$vars) {
if (arg(0) == 'taxonomy' && arg(1) == 'term') {
$vars['content'] = '<h1>Новый заголовок</h1>' . $vars['content'];
}
}
Бонусом, порядок запуска функций темизации:
Написанное актуально для
Drupal 6
Похожие записи
- Создание сравнительной таблицы с значениями из EAV Field
- Тест оверхеда Layout Builder и Paragraphs
- Темизация группы чекбоксов или радио-кнопок (#type=>checkboxes, #type=>radios)
- Как в Views программно изменить view mode выводимых сущностей по данным из cookie?
- Добавляем на страницу управления отображением материала поля "Заголовок" и "Дата создания"
Комментарии
спасибо. pdf полезная
Не подскажешь, как в семерке в своем модуле достучаться до переменной $node?
Хочу сделать тэг meta description с кратким описанием страницы, у меня есть CCK поле, текст которого подходит для этого тэга, но в своем модуле я не смог получить доступ ни к каким из этих переменных: $node, $content, $vars, $variables
Моя примитивная попытка не увенчалась успехом:
Приведенный в этой статье пример получения доступа к переменным тоже не работает, хотя в API семерки насколько я понял по сравнению с шестеркой изменений нет
не работает и этот вариант:
В чем я не прав?
Пробовал еще так:
но эта функция похоже для других целей
как оказалось, arg() возвращает составные куски алиаса, а не системного пути ноды. Решения пока не нашел, гуглю
http://api.drupal.ru/api/function/arg/6
да, в шестом так и было, но в седьмом видимо поменяли.
не меняли
Специально обновил друпал до версии 7.7 чтобы проверить.
arg(0) - ничего не возвращает (или возвращает пустую строку)
arg(1) - возвращает алиас
(у меня путь всего из одного звена, без слешей)
Как-то так...
Задачу свою я решил, может не очень красивым способом, но вроде работает. Когда будет время переделать по уму - займусь гуглением, а пока так:
да, на орге рекомендуют использовать menu_get_object(), но пока не разобрался как ее использовать
цитата отсюда: http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/arg/7
Забавное различие: если вызвать arg() внутри шаблона, допустим page.tpl.php - он вернет системный путь (ну как в шестом друпале и было), а если вызвать в своем модуле - вернет алиас.
не может этого быть :)
includes\path.inc:
includes\common.inc:
Прошу прощение что вмешался, запустил в d7 в своем модуле
КАРТИНКА arg()
calc/zzz это синоним?
hook_menu
calc/zzz — внутренний путь, ф-я arg работает согласно документации
я проверил на втором сайте, который тоже на седьмом друпале.
У него есть термин таксономии с алиасом: program/firefox
этот код в своем модуле:
выводит вместо ожидаемого «taxonomy term» - куски алиаса: «program firefox»
Потом не поленился, и поставил свежую установку друпала, чтобы проверить, и опять, вместо системного пути arg() возвращает алиас:
http://clip2net.com/clip/m22095/1313167138-clip-32kb.png
Попробуй вставь в свой модуль вызов этих функций, я думаю у тебя тоже будут возвращаться алиасы.
а точнее?
Просто без всяких функций, прямым текстом так и пишу.
содержимое файла _customp.module:
впрочем на скриншоте в моем предыдущем комменте видно то-же самое
хаха, кто ж прямым текстом модули пишет
http://api.drupal.ru/api/group/hooks/6
Уважаемый xandeadx! Помогите советом: столкнулся с проблемой вывода полей в переменной $content суть такова имеется код в node.tpl.php
<?php
$block = module_invoke('search', 'block', 'view', 0);
$serch = "".$block['content']."";
?>
<?php
$content_array = explode("
",$content);
$content_array_half_size = count($content_array) / 3;
if($content_array_half_size<=1){
print $content;
}else{
$added_string = $serch;
array_splice($content_array, $content_array_half_size, 0, $added_string);
$final_content = implode("
", $content_array);
print $final_content;
}
?>
код выводит блок поиска в середину статьи. Вопрос такого плана: как изменить данный код чтобы блок выводился именно после последнего абзаца или перед последним полем?
ищите позицию последнего параграфа с помощью strpos
вставляйте туда текст с помощью substr_replace
Спасибо за быстрый ответ! Буду пробовать
Может кому будет полезно - Шпоргалка по шаблонам друпал 7 - собраны и структурированы все переменные основных шаблонов и показан порядок и принцип именования файлов шаблонов.
Добавить комментарий