Как вывести заголовок блока (title) в page-front.tpl.php?

Главные вкладки

Аватар пользователя Dimyman Dimyman 4 мая 2010 в 11:18

Подскажите пожалуйста, как можно вывести заголовок блока в Drupal 6?

Мне надо выводить определенные блоки на главной странице.
Вывести содержимое получилось, а заголовок - нет.
<?php
$block = module_invoke('block', 'block', 'view', 1);
print $block['title'];
print $block['content'];
?>

title не выводит.

Это мой первый пост тут (поиском пользовался, но решения не нашел)
Подскажите как можно это реализовать?

Комментарии

Аватар пользователя Dimyman Dimyman 4 мая 2010 в 15:07

"glu2006" wrote:
А штатными средствами друпала выводить блоки на главную не позволяет религия или что-то иное?

Я хочу один и тот же блок выводить разных местах своей темы. Штатными средствами можно, но нельзя задать, что этот блок будет в этом регионе на этих страницах а вот в этом регионе на следующих например.
"ooa3" wrote:
Проверте, задано ли имя блока в разделе блоков, а не во вювс.

Имя блока задано в разделе блоков.

Аватар пользователя glu2006 glu2006 4 мая 2010 в 17:49

контент в блоке самописный? или это стандартный блок?
если блок не стандартный, то выход какой я к примеру вижу если контент не динамический т.е. не постоянно обновляемый, да даже если и постоянно обновляемый:
1. создаете блок с именем ИМЯ1 в его тело вызов функции которая генерит html.
2. создаете блок с именем ИМЯ2 в его тело тот-же самый вызов функции которая генерит html.
3. В своем модуле пишите функцию которая генерит html.
можно еще попробовать через

<?php
echo theme('blocks'имя региона);
?>

но в этом случае выведутся все блоки данного региона, хотя эту функцию можно передавить и прописать свой отсеиватель ненужного контента. Короче надо четко видеть задачу.

Аватар пользователя Dimyman Dimyman 5 мая 2010 в 7:55

"glu2006" wrote:
контент в блоке самописный? или это стандартный блок?
если блок не стандартный, то выход какой я к примеру вижу если контент не динамический т.е. не постоянно обновляемый, да даже если и постоянно обновляемый:
1. создаете блок с именем ИМЯ1 в его тело вызов функции которая генерит html.
2. создаете блок с именем ИМЯ2 в его тело тот-же самый вызов функции которая генерит html.

Стандартный блок, и контент статический (меняем его только средствами drupal), никаких хитрых фнкций внутри нет. меня вполне бы устроил бы module_invoke, но он не выдает возможности вывести title блока, либо я что-то неправильно делаю или не до конца понимаю.

Неужели нет простого решения обратиться к заголовку?

Аватар пользователя Dimyman Dimyman 24 мая 2010 в 13:59

Dan wrote:
"Dimyman" wrote:
print $block['title'];

print $block['subject'];

Проверял, не канает этот способ. Похоже проблема в теме acquia_marine

Аватар пользователя Dimyman Dimyman 24 мая 2010 в 13:59

Dan wrote:
"Dimyman" wrote:
print $block['title'];

print $block['subject'];

Проверял, не канает этот способ. Похоже проблема в теме acquia_marine

Аватар пользователя Sl_VVS Sl_VVS 13 мая 2010 в 15:04

У меня была такая же проблема. Блок создал с помощью views. Я сделал настройку блока в теме Bluemarine. В настройках блока заполнил поле Заголовок и сохранил блок. После этого поменял тему на свою. В ней используется вывод print $block['title'];. Title не отображался. После этого зашел в настройки блока и опять сохранил блок. После этого title стал отображаться.

Аватар пользователя moroz6600 moroz6600 7 августа 2010 в 21:21

Хе-хе.
Тоже подобный вопрос возник.
Предистория: есть 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'];
}
?>

Интуитивно догадываюсь че есть вариант и получше. Если ктото знает - посоветуйте.

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 7 августа 2010 в 22:16

Гм, чёта мне говорит, что лучше заюзать видимость блока через php код в настройках блока. Туда же можно втулить и аргумент видимости по страницам

<?php

if (date('j') <= 13) {
return 
TRUE;
}else{
return 
FALSE;
}

?>

Не проверял в работе

Аватар пользователя Dan Dan 7 августа 2010 в 23:58

Разместите оба блока в одном регионе и задайте разные условия видимости:

// первый блок
return (date('j') <= 13);
// второй блок
return (date('j') > 13);
Аватар пользователя moroz6600 moroz6600 9 августа 2010 в 1:22

Dan wrote:
Разместите оба блока в одном регионе и задайте разные условия видимости:

<?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'];)

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 9 августа 2010 в 3:49

module_invoke - так себе вариант, не "drupal way" уж точно. Основной недостаток - такой блок не кєшируется. Вам впринципе это не важно, раз у вас аяксовая корзина, но всё же....

Раз у вас ваш вариант работает - ради бога, применяйте его. Лучше только тот, который вам назвали.

Подружить с аргументами просто. Скажем показывать только на странице вида с адресом "product" и не показывать на "product/123",
стало быть

<?php

if (date('j') <= 13 && arg(0) == 'product' && arg(1) == NULL) {
return 
TRUE;
}else{
return 
FALSE;
}

?>
Аватар пользователя vovavovcic vovavovcic 25 февраля 2012 в 0:51

Тоже столкнулся с такой проблемой. С друпалом знаком 4 часа и впервые под него верстаю, не смотря на то что опыт работы 3 года с Джумлой, по этому пришла в голову идея от Джумлы. Суть в том что параметры выводятся в stdClass Object по этому попробовал вывести все как в Джумла, а именно :

<?php print $block->title; ?>

. Этот код я прописал в шаблоне блока : block.tpl.php . У меня сработало !