Подскажите пожалуйста, как можно вывести заголовок блока в Drupal 6?
Мне надо выводить определенные блоки на главной странице.
Вывести содержимое получилось, а заголовок - нет.
<?php
$block = module_invoke('block', 'block', 'view', 1);
print $block['title'];
print $block['content'];
?>
title не выводит.
Это мой первый пост тут (поиском пользовался, но решения не нашел)
Подскажите как можно это реализовать?
Комментарии
А штатными средствами друпала выводить блоки на главную не позволяет религия или что-то иное?
Проверте, задано ли имя блока в разделе блоков, а не во вювс.
Я хочу один и тот же блок выводить разных местах своей темы. Штатными средствами можно, но нельзя задать, что этот блок будет в этом регионе на этих страницах а вот в этом регионе на следующих например.
Имя блока задано в разделе блоков.
контент в блоке самописный? или это стандартный блок?
если блок не стандартный, то выход какой я к примеру вижу если контент не динамический т.е. не постоянно обновляемый, да даже если и постоянно обновляемый:
1. создаете блок с именем ИМЯ1 в его тело вызов функции которая генерит html.
2. создаете блок с именем ИМЯ2 в его тело тот-же самый вызов функции которая генерит html.
3. В своем модуле пишите функцию которая генерит html.
можно еще попробовать через
<?php
echo theme('blocks', имя региона);
?>
но в этом случае выведутся все блоки данного региона, хотя эту функцию можно передавить и прописать свой отсеиватель ненужного контента. Короче надо четко видеть задачу.
Стандартный блок, и контент статический (меняем его только средствами drupal), никаких хитрых фнкций внутри нет. меня вполне бы устроил бы module_invoke, но он не выдает возможности вывести title блока, либо я что-то неправильно делаю или не до конца понимаю.
Неужели нет простого решения обратиться к заголовку?
Кеш не пробовали чистить?
print $block['subject'];
Проверял, не канает этот способ. Похоже проблема в теме acquia_marine
Проверял, не канает этот способ. Похоже проблема в теме acquia_marine
У меня была такая же проблема. Блок создал с помощью views. Я сделал настройку блока в теме Bluemarine. В настройках блока заполнил поле Заголовок и сохранил блок. После этого поменял тему на свою. В ней используется вывод print $block['title'];. Title не отображался. После этого зашел в настройки блока и опять сохранил блок. После этого title стал отображаться.
поробуй print_r($block);
Хе-хе.
Тоже подобный вопрос возник.
Предистория: есть 2 блока - 1 блок корзины (создан модулем uc_ajax_cart), 2 - обычный блок с html текстом. NB: Выводить их нужно только на определенных страницах.
Заказ товара можно проводить с 1 по 13 число каждого месяца. В эти дни должен быть виден блок корзины. 14 числа он исчезает и на месте его появляется второй блок с сообщением че "Усьо. Апаздали ребята. Ждите следующего месяца"
Решил создать новый блок (назовем его №3) и в ньом выводить попеременно нужные блоки через функцию
<?php
if (date('j') <= 13) {
$block = module_invoke('uc_ajax_cart', 'block', 'view', 0);
return $block['content'];
}
else {
$block = module_invoke('block', 'block', 'view', 36);
return $block['content'];
}
?>
Единственая проблема - не отображалось название блока корзины (а соответственно и все навороты и функции).
Методом научного тыка нашел работоспособный вариант кода:
<?php
if (date('j') <= 13) {
$block = module_invoke('uc_ajax_cart', 'block', 'view', 0);
print $block['subject'];
$block = module_invoke('uc_ajax_cart', 'block', 'view', 0);
print $block['content'];
}
else {
$block = module_invoke('block', 'block', 'view', 36);
return $block['content'];
}
?>
Интуитивно догадываюсь че есть вариант и получше. Если ктото знает - посоветуйте.
Гм, чёта мне говорит, что лучше заюзать видимость блока через php код в настройках блока. Туда же можно втулить и аргумент видимости по страницам
<?php if (date('j') <= 13) {
return TRUE;
}else{
return FALSE;
} ?>
Не проверял в работе
Разместите оба блока в одном регионе и задайте разные условия видимости:
return (date('j') <= 13);
// второй блок
return (date('j') > 13);
<?php
// первый блок
if (date('j') <= 13) {
return TRUE;
}else{
return FALSE;
}
?>
<?php
// второй блок
if (date('j') > 13) {
return TRUE;
}else{
return FALSE;
}
?>
Вот этот способ я использую для второй подобной пары блоков, но с ними полегче - они выводятся на всех страницах.
Поначалу пытался подружить этот код с аргументами видимости по страницам. Но страницы созданы разными модулями, да и ручки кривые... Одним словом - не получилось. Вот, собственно, пользуюсь таким способом.
Но это все отступление от темы поста, который по прежнему не решен:
как грамотно в блоке/ноде вывести заголовок+тело другого блока с помощью функции $block = module_invoke
Мой способ - участок кода отвечающий за это, лично мне кажется неправильным:
$block = module_invoke('uc_ajax_cart', 'block', 'view', 0);
print $block['subject'];
$block = module_invoke('uc_ajax_cart', 'block', 'view', 0);
print $block['content'];)
module_invoke - так себе вариант, не "drupal way" уж точно. Основной недостаток - такой блок не кєшируется. Вам впринципе это не важно, раз у вас аяксовая корзина, но всё же....
Раз у вас ваш вариант работает - ради бога, применяйте его. Лучше только тот, который вам назвали.
Подружить с аргументами просто. Скажем показывать только на странице вида с адресом "product" и не показывать на "product/123",
стало быть
<?php if (date('j') <= 13 && arg(0) == 'product' && arg(1) == NULL) {
return TRUE;
}else{
return FALSE;
} ?>
Спасибо за совет, раз говорите че лучше, значит попытаюсь переделать.
Тоже столкнулся с такой проблемой. С друпалом знаком 4 часа и впервые под него верстаю, не смотря на то что опыт работы 3 года с Джумлой, по этому пришла в голову идея от Джумлы. Суть в том что параметры выводятся в stdClass Object по этому попробовал вывести все как в Джумла, а именно :
<?php print $block->title; ?>
. Этот код я прописал в шаблоне блока : block.tpl.php . У меня сработало !