HELP! SOS!
Речь идёт о группе "ПОЛЯ", и конкретно о поле "Дополнительные поля: file" для термина. По сути - это всего лишь прикреплённый к термину файл. Там есть такой вариант, как "выводить поле в виде ссылки". И ниже показаны так называемые "шаблоны для замены":
[file] == Дополнительные поля: PDF-файл (file)
В данном случае, [file] - это ID файла, не имя. (имя файла там выбрать нельзя, в модуле это не предусмотрено).
Можно ли по этому ID как-то получить ИМЯ файла?
И вообще, как можно использовать эти шаблоны для замены? (кроме как подставлять напрямую).
Заранее спасибо!
Комментарии
Конешно можно, запрос будет типа:
<?php
$fid = 1; //Ваш айди файла
$sql = "SELECT filename FROM {files} WHERE fid = %d";
$filename = db_fetch_array(db_query($sql, $fid));
$filename['filename']; //Имя файла
?>
Спасибо большое. Это уже что-то.
Просто вопрос был применительно к Views. Если я не ошибаюсь, при работе с вьюс там некуда вставить такой код. Там можно оперировать только с шаблоном [file]. Как же быть?
з.ы. наверное это свинство с моей стороны: но если таких запросов на страницу будет штук 10, то этот вариант не очень хорош.
Ещё один способ - подредактировать модуль term_fields (который и обеспечивает присоединение файлов к термину). Но это довольно сложно, как по мне.
В этом случае нужно использовать тему для вювс.
Я нашёл в модуле Вьюс функцию template_preprocess_views_view_fields(), вы не о ней сейчас говорите? Если да - куда её засунуть? В template.php что ли....?
Нет, я говорил про тему для view
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;?>
У вас вид покажет названия всех нод, определённые вами ранее для этого вида. Аналогично с остальным
А можно уточнение для чайника? Я до Rescan дошел, шаблон подхватило. Но дальше я запутался. Куда мы ставляем код? В файл который мы положили в папку темы или редактируем прямо в настройках Вида, если такое возможно?
Классно, многое прояснилось. Но что-то у меня пока только ошибки повылетали.
Оно почему-то вообще не хочет юзать переменную $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);
Там в шаблоне даже написано, что этот объект можно юзать.
А вы сделайте как я написал и всё будет пучком
Чтобы извлечь переменные для развёрнутых фильтров, можно юзать такое:
<?php foreach ($widgets as $id => $widget) {
$out .= '<b>$widgets[\''.$id.'\']</b> = '.check_plain($widget->content).'<br/><br/>';
}
drupal_set_message($out); ?>
Спасибо, что пытаетесь помочь. Сделал:
warning: Invalid argument supplied for foreach() in /sites/all/themes/ersit/views-view-field--file.tpl.php on line 27.
Это сообщение выпадает, когда я смотрю саму вьюху. (из общедоступного места сайта)
Вы наверное будете смеяться, но сработал следующий вариант:
<?php
$fid = $row->term_fields_term_file;
$filename = db_fetch_array(db_query("SELECT filename FROM {files} WHERE fid = %d", $fid));
print $filename['filename'];
?>
Приведённый мною первый пример для темизации строки,
то есть там должно в названии быть не field а fields
В работающем примере доп запрос к БД, коих сами вьюсы плодят и так много. Там просто в дефолтном шаблоне посмотреть как сделано по дефолту,какая конструкция используется
В дефолтном шаблоне написано
ПРИНТ $АУТПУТ
А без запроса к БД ничего не сделаешь. Дело в том, что модуль term_fields не поставляет имени файла для работы с Вьюс. Только ID. Если бы там было ИМЯ файла, вопроса не было бы.
Спасибо!
Ага, уже разобрался. Несколько часов бился, не мог разобраться, а стоило только написать на форум, ка осенило
Осталось только спросить, зачем столько вариантов шаблонов, типа
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
И как мне сделать чтобы данный вывод подхватывался еще и отдельно открытой из вида нодой?
Спасибо!
первый примерно означает:
"шаблон вида для стиля вывода "таблица" и отображения "страница",
второй:
"шаблон вида для стиля вывода "таблица" и отображения "страница" с названием "треккер"
Обилие шаблонов на первый взгляд бесполезно, но если присмотреться, то стаёт понятно, что это открывает широкие возможности для темизации