Как добавить к выводу терминов поле имидж, прикрепленное к данному термину. Для Drupal 7.

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

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 14:28

Вывожу следующим кодом, найденым на форуме, список дочерних терминов с глубиной 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;
  }
}

?>

Комментарии

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 14:42

убираю свой код и вставляю ваш, вот что выдает:

Notice: Undefined variable: tid в функции eval() (строка 9 в файле /home/dmitriy/public_html/box/modules/php/php.module(80) : eval()'d code).

Array
(
)

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 14:52

Если сделаю так

<?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>";
  }
}

 

?>

то получаю вот так :

 Array
(
    [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
                        )

                )

        )

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 15:02

dmitrymenshikov wrote:
Структура -> Таксономия -> Имя_словаря -> Управление полями

имя словаря 'catalog' поле изображения соответственно 'field_catalog_image'

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 15:35

dmitrymenshikov wrote:
"ss_400" wrote:
далее то как сделать?

С php на "Вы"?

с php в процессе изучения Smile . иначе не задавал бы вопрос.

Аватар пользователя kopernik21187 kopernik21187 1 февраля 2013 в 16:10

Как видно из того что получаем в массиве $terms то там нету прямы данных об изображении. Я бы на вашем месте открыл phpMyAdmin и посмотрел в поиске где в какой таблице сохраняются данные об изображении и уже бы исходил из этого. Т.е. идете в вашу БД, в phpMyAdmin выбираете "Поиск" и по названию файла смотрите куда сохраняются данные о картинке и как это связано с термином. Просто я с модулем Taxonomy Image дела не имел.

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 17:01

kopernik21187 wrote:
Как видно из того что получаем в массиве $terms то там нету прямы данных об изображении. Я бы на вашем месте открыл phpMyAdmin и посмотрел в поиске где в какой таблице сохраняются данные об изображении и уже бы исходил из этого. Т.е. идете в вашу БД, в phpMyAdmin выбираете "Поиск" и по названию файла смотрите куда сохраняются данные о картинке и как это связано с термином. Просто я с модулем Taxonomy Image дела не имел.

Поиск по базе дал информацию об id , названии поля, папке где хранится, и что относится к taxonomy_term , ничего больше не выдал

Аватар пользователя dmitrymenshikov dmitrymenshikov 1 февраля 2013 в 16:11

Потом:


<?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 .$item .'

' .'

';

Если картинку нужно обрезать/растянуть/перевернуть пользуйтесь вот этим image_style_url()

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 17:06

dpm() будет доступна после установки модуля devel (крайне полезный при разработке), она поможет добраться до поля с картинкой в $terms.
Потом находите путь до картинки и вставляете сюда $output .= '

' . $image .$item .'

' .'

';

Если картинку нужно обрезать/растянуть/перевернуть пользуйтесь вот этим image_style_url()[/quote]

я добавил следующие дополнения в код как вы мне сказали :

<?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 'sites/default/files/images/brands/';
      
$output .= '<td>';

      

$output .= $image .$item .'</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/ Таркетт

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 17:47

ХулиGUN wrote:
термин это сущность, так что думаю можно просто field_view_field()
http://api.drupal.org/api/drupal/modules%21field%21field.module/function...

с field_view_field() я уже пробовал, но возможно что то неправильно делал :

 
<?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'$display = array(), $langcode NULL);
      
$output .= '<tr>';
      
$item l($term->name'catalog/'$term->tid);
      
$output .= '<td>';
      
$output .= $image .$item .'</td>';
      
$output .= '</tr>';
    }
    
$output .= '</table>';
    return 
$output;
  }
}
?> 

выводит соответственно

ArrayBalterio
ArrayBerry Floor
ArrayEGGER
ArrayEPI
ArrayEuroHome
ArrayKronotex
ArrayPraktik
ArrayQuick Step
ArrayWitex
ArrayАллок
ArrayКроностар
ArrayКроношпан
ArrayПерго
ArrayСИНТЕРОС
ArrayТаркетт

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 18:12

ХулиGUN wrote:
"ss_400" wrote:
с field_view_field() я уже пробовал, но возможно что то неправильно делал :

Чтонаходится в Array?

Чем посмотреть?

 <tr>
<td>
Array
<a href="/box/catalog/laminat/balterio">Balterio</a>
</td>
</tr>

так Html выглядит

Аватар пользователя ss_400 ss_400 1 февраля 2013 в 18:42

выдает следующее :

 <div class="view-_product_catalog-page_4 view view--product-catalog view-id-_product_catalog view-display-id-page_4 view-dom-id-c9bbc389f9b5ebb74448f8752846459a">
<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);
    }
  }
}
?>
?> 
Аватар пользователя ss_400 ss_400 1 февраля 2013 в 19:18

ХулиGUN wrote:

$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>';

все равно выводит :

 <tr>
<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;

  }
}

?>
Аватар пользователя ss_400 ss_400 2 февраля 2013 в 11:03

kopernik21187 wrote:
Попробуйте сделать все же как я вам сказал. Возможно для вас это будет самый легкий и быстрый способ.

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

Аватар пользователя kopernik21187 kopernik21187 2 февраля 2013 в 16:34

Вот как раз по названию файла картинки вы и должны были найти информацию о том в какой таблице сохраняется запись о ней. Возможно вы не можете найти из-за того что одну и ту же картинку вы загружали несколько раз. В этом случаем друпал к названию дописывает _0, _1 и так далее. Вам нужно тогда в этом случае искать filename_1.jpg,filename_2.jpg , а вообще же должны были найти. Я всегда в таких случаях нахожу.

Аватар пользователя ss_400 ss_400 2 февраля 2013 в 18:07

kopernik21187 wrote:
Вот как раз по названию файла картинки вы и должны были найти информацию о том в какой таблице сохраняется запись о ней. Возможно вы не можете найти из-за того что одну и ту же картинку вы загружали несколько раз. В этом случаем друпал к названию дописывает _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 сталкиваюсь.

Аватар пользователя ss_400 ss_400 3 февраля 2013 в 11:51

Подскажите плз в какую сторону еще покопать, сам пока ничего не нашел.
для 6ки есть рабочие решения на форуме, а для 7ки - не работают.

Аватар пользователя ss_400 ss_400 8 февраля 2013 в 14:28

Всем огромное спасибо за помощь и потраченное время, КАЖДЫЙ совет помог мне вникнуть в суть данного вопроса.
в итоге благодаря еще одному <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;

  }
}

?>
Аватар пользователя AlexeyBorisenko AlexeyBorisenko 21 августа 2013 в 18:13

ss_400, тоже несколько дней мудрю с выводом имиджа для этого "простого каталога".
Ваш код выше хорошо вместился во views для Страницы.
А вот для "Корня каталога" вывод имиджа что-то не получается.
Не решали этот вопрос?