Как использовать шаблоны для замены во Views?

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

Аватар пользователя krock krock 4 мая 2010 в 12:09

HELP! SOS!

Речь идёт о группе "ПОЛЯ", и конкретно о поле "Дополнительные поля: file" для термина. По сути - это всего лишь прикреплённый к термину файл. Там есть такой вариант, как "выводить поле в виде ссылки". И ниже показаны так называемые "шаблоны для замены":

[file] == Дополнительные поля: PDF-файл (file)

В данном случае, [file] - это ID файла, не имя. (имя файла там выбрать нельзя, в модуле это не предусмотрено).
Можно ли по этому ID как-то получить ИМЯ файла?

И вообще, как можно использовать эти шаблоны для замены? (кроме как подставлять напрямую).

Заранее спасибо! Smile

Комментарии

Аватар пользователя ooa3 ooa3 4 мая 2010 в 14:14

Конешно можно, запрос будет типа:

<?php
$fid = 1; //Ваш айди файла
$sql = "SELECT filename FROM {files} WHERE fid = %d";
$filename = db_fetch_array(db_query($sql, $fid));

$filename['filename']; //Имя файла
?>

Аватар пользователя krock krock 4 мая 2010 в 22:02

Спасибо большое. Это уже что-то. Smile

Просто вопрос был применительно к Views. Если я не ошибаюсь, при работе с вьюс там некуда вставить такой код. Там можно оперировать только с шаблоном [file]. Как же быть?

з.ы. наверное это свинство с моей стороны: но если таких запросов на страницу будет штук 10, то этот вариант не очень хорош.

Аватар пользователя krock krock 5 мая 2010 в 14:08

Ещё один способ - подредактировать модуль term_fields (который и обеспечивает присоединение файлов к термину). Но это довольно сложно, как по мне. Sad

Аватар пользователя ooa3 ooa3 5 мая 2010 в 22:33

"krock" wrote:
Просто вопрос был применительно к Views. Если я не ошибаюсь, при работе с вьюс там некуда вставить такой код. Там можно оперировать только с шаблоном [file]. Как же быть?

В этом случае нужно использовать тему для вювс.

Аватар пользователя krock krock 6 мая 2010 в 17:46

Я нашёл в модуле Вьюс функцию template_preprocess_views_view_fields(), вы не о ней сейчас говорите? Если да - куда её засунуть? В template.php что ли....? Smile

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 6 мая 2010 в 18:32

krock: то что вы имеете ввиду, это не шаблонизация, а так, баловство.

Как темизировать по настоящему:

Открываете пункт, который указал ooa3. Там список доступных элементов. Можно темизировать весь вид, можно строку, можно стиль, можно каждое поле по отдельности. Вам скорее всего подойдёт темизация строки (row)

Как видите, там для каждой темизации есть список возможных названий шаблонов для этого стиля темизации. Жирным выделен тот шаблон, который используется сейчас (по умолчанию задействован системный из папки модуля Вьюс). Если вы создадите файл шаблона с названием из доступных, положите его в директорию темы и нажмёте кнопочку "Rescan" (внизу посмотрите), вид у вас подхватит этот шаблон и выделит в списке доступных жирным - это значит он его сейчас использует.

Далее, открываем ваш созданный шаблон и смотрим, какие переменные доступны

Вставляем:

<?php

foreach ($fields as $id => $field) {
  
$out .= '<b>$fields[\''.$id.'\']</b> = '.check_plain($field->content).'<br/><br/>';
}
drupal_set_message($out);

?>

и сохраняем шаблон

Открываем вид. У вас в системном сообщении покужутся все доступные поля, которые вы определили для этого вида.

Теперь осталось только повставлять эти значения как угодно. Инклуд будет выглядеть для названия ноды так например:

<?phpprint $fields['title']->content;?>

Убираете то что мы вставили ранее и вставляете

<?phpprint $fields['title']->content;?>

У вас вид покажет названия всех нод, определённые вами ранее для этого вида. Аналогично с остальным

Аватар пользователя Mixa Mixa 30 октября 2010 в 16:36

<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a> wrote:
krock: то что вы имеете ввиду, это не шаблонизация, а так, баловство.

Далее, открываем ваш созданный шаблон и смотрим, какие переменные доступны

Вставляем:

<?php

foreach ($fields as $id => $field) {
  
$out .= '<b>$fields[\''.$id.'\']</b> = '.check_plain($field->content).'<br/><br/>';
}
drupal_set_message($out);

?>

А можно уточнение для чайника? Я до Rescan дошел, шаблон подхватило. Но дальше я запутался. Куда мы ставляем код? В файл который мы положили в папку темы или редактируем прямо в настройках Вида, если такое возможно?

Аватар пользователя krock krock 6 мая 2010 в 19:12

Классно, многое прояснилось. Но что-то у меня пока только ошибки повылетали.

Оно почему-то вообще не хочет юзать переменную $field, пишет вот что:

recoverable fatal error: Object of class views_handler_field could not be converted to string in /sites/all/themes/ersit/views-view-field--file.tpl.php on line 23.

Хотя я написал всего лишь: var_dump($field);
Там в шаблоне даже написано, что этот объект можно юзать.

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 6 мая 2010 в 19:56

А вы сделайте как я написал и всё будет пучком

Чтобы извлечь переменные для развёрнутых фильтров, можно юзать такое:

<?php

foreach ($widgets as $id => $widget) {
  
$out .= '<b>$widgets[\''.$id.'\']</b> = '.check_plain($widget->content).'<br/><br/>';
}
drupal_set_message($out);

?>
Аватар пользователя krock krock 6 мая 2010 в 21:25

Спасибо, что пытаетесь помочь. Сделал:

warning: Invalid argument supplied for foreach() in /sites/all/themes/ersit/views-view-field--file.tpl.php on line 27.

Это сообщение выпадает, когда я смотрю саму вьюху. (из общедоступного места сайта)

Smile

Аватар пользователя krock krock 6 мая 2010 в 21:35

Вы наверное будете смеяться, но сработал следующий вариант:

<?php  
$fid 
$row->term_fields_term_file;
$filename db_fetch_array(db_query("SELECT filename FROM {files} WHERE fid = %d"$fid));
print 
$filename['filename'];  
?>
Аватар пользователя volocuga@drupal.org volocuga@drupal.org 6 мая 2010 в 22:45

Приведённый мною первый пример для темизации строки,
то есть там должно в названии быть не field а fields

В работающем примере доп запрос к БД, коих сами вьюсы плодят и так много. Там просто в дефолтном шаблоне посмотреть как сделано по дефолту,какая конструкция используется

Аватар пользователя krock krock 7 мая 2010 в 23:15

В дефолтном шаблоне написано

ПРИНТ $АУТПУТ Lol

А без запроса к БД ничего не сделаешь. Дело в том, что модуль term_fields не поставляет имени файла для работы с Вьюс. Только ID. Если бы там было ИМЯ файла, вопроса не было бы. Smile

Спасибо! Lol

Аватар пользователя Mixa Mixa 30 октября 2010 в 16:57

Ага, уже разобрался. Несколько часов бился, не мог разобраться, а стоило только написать на форум, ка осенило Smile

Осталось только спросить, зачем столько вариантов шаблонов, типа

views-view-table.tpl.php(зачем это?),
views-view-table--tracker.tpl.php (этот я использовал для того чтобы изменить вывод в виде),
views-view-table--default.tpl.php (зачем это?),

в чем разница между
views-view-table--page.tpl.php и views-view-table--tracker--page.tpl.php

И как мне сделать чтобы данный вывод подхватывался еще и отдельно открытой из вида нодой?

Спасибо!

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 30 октября 2010 в 17:38

"Mixa" wrote:
в чем разница между
views-view-table--page.tpl.php и views-view-table--tracker--page.tpl.php

первый примерно означает:

"шаблон вида для стиля вывода "таблица" и отображения "страница",

второй:

"шаблон вида для стиля вывода "таблица" и отображения "страница" с названием "треккер"

Обилие шаблонов на первый взгляд бесполезно, но если присмотреться, то стаёт понятно, что это открывает широкие возможности для темизации