Вывожу следующим кодом, найденым на форуме, список дочерних терминов с глубиной 1, список выводится нормально.
Подскажите как добавить к названию выводимого термина поле имиджа, которое добавлено к данному термину?
задача выводить именно кодом который размещен в шапке Вьюса.
Модуль Taxonomy Image установлен.
<?php
$vocabulary_machine_name
= 'catalog';
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения
if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
if (!empty($terms)) {
$output = '<table class="catalog-page">';
foreach ($terms as $tid => $term) {
$output .= '<tr>';
$item = l($term->name, 'catalog/'. $term->tid);
$output .= '<td>' .$item .'</td>' .'</tr>';
}
$output .= '</table>';
return $output;
}
}
?>
Комментарии
Сделайте ка
<?php
$terms = taxonomy_get_children($tid, $vid);
echo "<pre>";
print_r($terms);
echo "</pre>";
?>
Покажите что там.
убираю свой код и вставляю ваш, вот что выдает:
Notice: Undefined variable: tid в функции eval() (строка 9 в файле /home/dmitriy/public_html/box/modules/php/php.module(80) : eval()'d code).
Array
(
)
Если сделаю так
<?php $vocabulary_machine_name = 'catalog';
?>
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
if (!empty($terms)) {
$terms = taxonomy_get_children($tid, $vid);
echo "<pre>";
print_r($terms);
echo "</pre>";
}
}
то получаю вот так :
(
[3134] => stdClass Object
(
[tid] => 3134
[vid] => 1
[name] => ARTISAN 933
[description] =>
[format] => full_html
[weight] => 0
[vocabulary_machine_name] => catalog
[field_vocabulary_name] => Array
(
)
[field_catalog_image] => Array
(
)
[metatags] => Array
(
)
[rdf_mapping] => Array
(
[rdftype] => Array
(
[0] => skos:Concept
)
[name] => Array
(
[predicates] => Array
(
[0] => rdfs:label
[1] => skos:prefLabel
)
)
[description] => Array
(
[predicates] => Array
(
[0] => skos:definition
)
)
[vid] => Array
(
[predicates] => Array
(
[0] => skos:inScheme
)
[TYPE] => rel
)
[parent] => Array
(
[predicates] => Array
(
[0] => skos:broader
)
[TYPE] => rel
)
)
)
Структура -> Таксономия -> Имя_словаря -> Управление полями
имя словаря 'catalog' поле изображения соответственно 'field_catalog_image'
уже выучил , выше уже сделал, далее то как сделать?
С php на "Вы"?
с php в процессе изучения . иначе не задавал бы вопрос.
Как видно из того что получаем в массиве $terms то там нету прямы данных об изображении. Я бы на вашем месте открыл phpMyAdmin и посмотрел в поиске где в какой таблице сохраняются данные об изображении и уже бы исходил из этого. Т.е. идете в вашу БД, в phpMyAdmin выбираете "Поиск" и по названию файла смотрите куда сохраняются данные о картинке и как это связано с термином. Просто я с модулем Taxonomy Image дела не имел.
Поиск по базе дал информацию об id , названии поля, папке где хранится, и что относится к taxonomy_term , ничего больше не выдал
Потом:
<?php
$vocabulary_machine_name
= 'catalog';$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
dpm($terms);
if (!empty(
$terms)) {$output = '<table class="catalog-page">';
foreach ($terms as $tid => $term) {
$output .= '<tr>';
$item = l($term->name, 'catalog/'. $term->tid);
$image = path_to_image;
$output .= '<td>' .$item .'</td>' .'</tr>';
}
$output .= '</table>';
return $output;
}
} ?>
dpm() будет доступна после установки модуля devel (крайне полезный при разработке), она поможет добраться до поля с картинкой в $terms.
Потом находите путь до картинки и вставляете сюда $output .= '
' .'
';
Если картинку нужно обрезать/растянуть/перевернуть пользуйтесь вот этим image_style_url()
dpm() будет доступна после установки модуля devel (крайне полезный при разработке), она поможет добраться до поля с картинкой в $terms.
Потом находите путь до картинки и вставляете сюда $output .= '
' .'
';
Если картинку нужно обрезать/растянуть/перевернуть пользуйтесь вот этим image_style_url()[/quote]
я добавил следующие дополнения в код как вы мне сказали :
<?php
$output .= $image .$item .'</td>';
$vocabulary_machine_name = 'catalog';
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
dpm($terms);
if (!empty($terms)) {
$output = '<table class="catalog-page">';
foreach ($terms as $tid => $term) {
$output .= '<tr>';
$item = l($term->name, 'catalog/'. $term->tid);
$image = 'sites/default/files/images/brands/';
$output .= '<td>';
$output .= '</tr>';
}
$output .= '</table>';
return $output;
}
}
?>
, но выводится соответственно данный список терминов и впереди путь:
sites/default/files/images/brands/ Balterio
sites/default/files/images/brands/ Berry Floor
sites/default/files/images/brands/ EGGER
sites/default/files/images/brands/ EPI
sites/default/files/images/brands/ EuroHome
sites/default/files/images/brands/ Kronotex
sites/default/files/images/brands/ Praktik
sites/default/files/images/brands/ Quick Step
sites/default/files/images/brands/ Witex
sites/default/files/images/brands/ Аллок
sites/default/files/images/brands/ Кроностар
sites/default/files/images/brands/ Кроношпан
sites/default/files/images/brands/ Перго
sites/default/files/images/brands/ СИНТЕРОС
sites/default/files/images/brands/ Таркетт
Вывод полей в Drupal 7
Чем посмотреть?
<td>
Array
<a href="/box/catalog/laminat/balterio">Balterio</a>
</td>
</tr>
так Html выглядит
выдает следующее :
<div class="view-header"> Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) </div>
</div>
код ввожу следующий:
<?php
$vocabulary_machine_name = 'catalog';
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
dpm($terms);
if (!empty($terms)) {
$output = '<table class="catalog-page">';
foreach ($terms as $tid => $term) {
$image = field_view_field('taxonomy_term', $term, 'field_catalog_image', $langcode = NULL);
print_r($image);
}
}
}
?>
?>
все равно выводит :
<td>
Array
<a href="/box/catalog/laminat/balterio">Balterio</a>
</td>
</tr>
вот полный код :
<?php
$vocabulary_machine_name = 'catalog';
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
dpm($terms);
if (!empty($terms)) {
$output = '<table class="catalog-page">';
foreach ($terms as $tid => $term) {
$image = field_get_items("taxonomy_term", $term, "field_catalog_image");
$img = field_view_value("taxonomy_term",
$term,
"field_catalog_image",
$image[0],
array(
"type" => "image",
"settings" => array(
"image_style" => "thumbnail",
),
));
$output .= '<tr>';
$item = l($term->name, 'catalog/'. $term->tid);
$output .= '<td>';
$output .= $img .$item .'</td>';
$output .= '</tr>';
}
$output .= '</table>';
return $output;
}
?>}
Попробуйте сделать все же как я вам сказал. Возможно для вас это будет самый легкий и быстрый способ.
что нужно найти и как конкретно потом это использовать?
я вроде выше написал что ничего особого поиском не нашел, искал по названию файла-картинки.
Вот как раз по названию файла картинки вы и должны были найти информацию о том в какой таблице сохраняется запись о ней. Возможно вы не можете найти из-за того что одну и ту же картинку вы загружали несколько раз. В этом случаем друпал к названию дописывает _0, _1 и так далее. Вам нужно тогда в этом случае искать filename_1.jpg,filename_2.jpg , а вообще же должны были найти. Я всегда в таких случаях нахожу.
таблица 1.watchdog записи следующие:
%type: !message in %function (line %line of %file).
http://localhost/box/taxonomy/term/3019/edit?destination=admin/structure...
таблица 2.file_managed записи следующие:
1.запись
106 1 torkett.gif public://images/brands/torkett.gif image/gif 6863 1 1353594022 torkett.gif
2.запись
264 1 torkett.gif public://torkett.gif image/gif 6863 1 1359810833 torkett.gif
больше записей нет, а наличие дублирующихся картинок я проверяю обычно и в данном случае тоже проверил, так как с этой фишкой Drupal сталкиваюсь.
Подскажите плз в какую сторону еще покопать, сам пока ничего не нашел.
для 6ки есть рабочие решения на форуме, а для 7ки - не работают.
Всем огромное спасибо за помощь и потраченное время, КАЖДЫЙ совет помог мне вникнуть в суть данного вопроса.
в итоге благодаря еще одному
<a href="http://xandeadx.ru/blog/drupal/18#comment-7717">совету</a>
доделал вывод следующим образом:<?php
$vocabulary_machine_name = 'catalog';
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
$vid = $vocabulary->vid; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 5; // кол-во столбцов для отображения if (is_numeric(arg($arg_pos))) {
$tid = arg($arg_pos);
$terms = taxonomy_get_children($tid, $vid);
dpm($terms);
if (!empty($terms)) {
$output = '<table class="catalog-page">';
foreach ($terms as $tid => $term) {
$uri= $term->field_catalog_image['und'][0]['filename'];
if(isset($uri)){
$style = '150x150sc';
$image = "<img src=".image_style_url($style, "images/brands/". $uri).">";
}else{
$style = '150x150sc';
$image = "<img src=".image_style_url($style, "default_images/default.png").">";
}
$output .= '<tr>';
$item = l($term->name, 'catalog/'. $term->tid);
$output .= '<td>';
$output .= $image .$item .'</td>';
$output .= '</tr>';
}
$output .= '</table>';
return $output;
}
?>}
ss_400, тоже несколько дней мудрю с выводом имиджа для этого "простого каталога".
Ваш код выше хорошо вместился во views для Страницы.
А вот для "Корня каталога" вывод имиджа что-то не получается.
Не решали этот вопрос?