Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

Добавляем ALT описание для картинок в карточке товара

Это не готовое расширение, точнее не из коробки, но полезное  ;)

Если добавлено к товару несколько картинок, то в атрибутах ALT везде одно и то же написано. Например туда суют описание товара или его название, что совсем не гуд.

Результат можно посмотреть на скрине в конце статьи.

1 Выводим текстовое поле для каждой картинки
Открываем файл admin\includes\modules\products_images.php

Находим строку ~42
echo '<td class="main">'.TEXT_PRODUCTS_IMAGE.' '. ($i +1).'<br />'.os_draw_file_field('mo_pics_'.$i).'<br />'.'&nbsp;'.$mo_images.os_draw_hidden_field('products_previous_image_'. ($i +1), $mo_images);
Заменяем ее на
echo '<td class="main">'.TEXT_PRODUCTS_IMAGE.' '. ($i +1).'<br />'.os_draw_file_field('mo_pics_'.$i).'<br /><textarea name="mo_text_'.$i.'" rows="3" cols="100">'.$mo_images.'</textarea><br />'.'&nbsp;'.$mo_images.os_draw_hidden_field('products_previous_image_'. ($i +1), $mo_images);
Мы тут добавили поле для заполнения. По сути, его можно разместить где угодно, в пределах цикла for ($i = 0; $i < MO_PICS; $i ++)
<textarea name="mo_text_'.$i.'" rows="3" cols="100">'.$mo_images.'</textarea><br />

Далее, сохраняем и закрываем файл. Он нам больше не нужен.

2 Правка функции os_get_products_mo_images
Открываем файл includes\functions\admin.include.php и ищем функцию os_get_products_mo_images. В функции делается запрос к БД, в таблицу TABLE_PRODUCTS_IMAGES...

В этой функции ищем строку

$mo_query = "select image_id, image_nr, image_name from " . TABLE_PRODUCTS_IMAGES . " where products_id = '" . $products_id ."' ORDER BY image_nr";

и меняем на
$mo_query = "select image_id, image_nr, image_name, text from " . TABLE_PRODUCTS_IMAGES . " where products_id = '" . $products_id ."' ORDER BY image_nr";

мы просто добавили , text после image_name. В text как раз и будет храниться описания картинок.

Далее, сохраняем и закрываем файл. Он нам больше не нужен.

3 Правка класса categories
Открываем файл admin\includes\classes\categories.php
ищем строку
rename(dir_path('images_original').$pIMG->filename, dir_path('images_original').$products_image_name);

НИЖЕ добавляем
$img_text = $_POST['mo_text_'.$img];


Далее ищем ниже строчку ~557 строка.
create_MO_PICS ($products_image_name, $img, $action, $products_id, $products_data);

и меняем на
create_MO_PICS ($products_image_name, $img, $action, $products_id, $products_data, $img_text);

мы тут в метод create_MO_PICS, передаем новый аргумент $img_text, в котором, собственно, и лежит наш текст

Ищем строку
$mo_field_name='mo_pics_get_file_image_'.$img;

НИЖЕ добавляем
$img_text = $_POST['mo_text_'.$img];


Ищем строку
create_MO_PICS ($mo_products_image_name, $img, $action, $products_id, $products_data);

меняем ее на
create_MO_PICS ($mo_products_image_name, $img, $action, $products_id, $products_data, $img_text);


Теперь поправим метод create_MO_PICS.
Почти в самом низу файла есть строка
function create_MO_PICS ($mo_products_image_name, $mo_image_number, $performed_action, $products_id, &$products_data){

Ее нужно заменить на
function create_MO_PICS ($mo_products_image_name, $mo_image_number, $performed_action, $products_id, &$products_data, $img_text){


Ниже, ищем строку
'image_name' => os_db_prepare_input($mo_products_image_name));

И заменяем ее на
'image_name' => os_db_prepare_input($mo_products_image_name),
'text' => os_db_prepare_input($img_text));

Тут мы как раз записываем в БД наш текст.

Далее, сохраняем и закрываем файл. Он нам больше не нужен.
На этом этапе работа с админкой закончена. Мы вывели поле textarea, сделали запись и вывод текста картинки в цикле.

4 Выполняем запрос в БД
Открываем свой phpMyAdmin (PMA) и выполняем
ALTER TABLE `os_products_images` ADD `text` text default '';

Если вы ставили свой префикс таблиц, то меняйте os_ на свой.
Мы добавляем в таблицу os_products_images новое поле text, с типом поля text. Можно было конечно ограничить с помощью varchar до нужного количества символов, например varchar(255), но я делать этого не стал. К описанию для картинок не стоит подходить фанатично и пихать туда все подряд!

Теперь надо вывести само описание в карточке товара!
Приступим

5 Предопределяем вывод описания картинок
На втором шаге мы правили функцию os_get_products_mo_images, туда добавляли text в запрос.
Получение результата из этой функции так же происходит в файле modules\product_info.php
Этот файл отвечает за вывод карточки товара.

Открываем этот файл и ищем строку
if (!file_exists(dir_path('images_popup').$img['image_name'])) $products_mo_popup_link = '';

Ниже добавляем
if (!empty($img['text']))
$image_text = $img['text'];
else
$image_text = $product->data['products_name'];

Простая проверка. Если не заполнили описание картинки (т.е. если пуст $img['text']), то подставляем название товара.

Ищем строку
'PRODUCTS_MO_IMAGE' => http_path('images_info') . $img['image_name'],

Ниже добавляем строку
'PRODUCTS_MO_TEXT' => $image_text,


Теперь PRODUCTS_MO_TEXT можно использовать в плагинах (если такие используются), чтобы выводить описание картинки.

Теперь строку
'PRODUCTS_MO_IMAGE_BLOCK' => '<a href="'.$products_mo_popup_link.'" title="'.$product->data['products_name'].'" class="zoom" rel="gallery-plants" target="_blank"><img src="'.http_path('images_info') . $img['image_name'].'" alt="'.$product->data['products_name'].'" /><br /><img src="'._HTTP_THEMES_C.'img/zoom.gif" alt="zoom" border="0" width="16" height="12" /></a>',

меняем на
'PRODUCTS_MO_IMAGE_BLOCK' => '<a href="'.$products_mo_popup_link.'" title="'.$image_text.'" class="zoom" rel="gallery-plants" target="_blank"><img src="'.http_path('images_info') . $img['image_name'].'" alt="'.$image_text.'" /><br /><img src="'._HTTP_THEMES_C.'img/zoom.gif" alt="zoom" border="0" width="16" height="12" /></a>',

Тут мы сменили в alt и в ссылке название товара на наше описание.

На этом все. Если есть вопросы или проблемы, пишем в комментах.
Надеюсь кому-то будет полезно.

UPD. Сделал проверку на заполненность описания картинки. Если описание пусто, то выводим название товара.

Вообще не обязательно делать как ALT описание. Можно выводить отдельно под картинкой, если используется плагин. Т.е. если нужно подробно описать каждую картинку товара, то этот хак подойдет идеально.


Источник

Результат будет таков


а как на счет мультиязычности?


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


Что-то у меня не вышло.....В админке поля появились...можно писать текст...все без ошибок, в БД альт добавился, но на странице товара ALT не меняется (остается тем же что и название товара) ((( В чем может быть проблема?


может кэш включен?
Должно быть нормально, если делали по инструкции.


/modules/product_info.php также отвечает за вывод альтов к картинке так?
и если я из этого кода

'PRODUCTS_MO_IMAGE_BLOCK' => '<a href="'.$products_mo_popup_link.'" title="'.$image_text.'" class="zoom" rel="gallery-plants" target="_blank"><img src="'.http_path('images_info') . $img['image_name'].'" alt="'.$image_text.'" /><br /><img src="'._HTTP_THEMES_C.'img/zoom.gif" alt="zoom" border="0" width="16" height="12" /></a>',
удалю
alt="'.$image_text.'"

то альты выводится не будут так???
Не должны по крайней мере...)))
А если будут выводится то у меня руки из Ж (((


Фигня какая-то...либо я не там копаюсь...Кеш отключен я его еще не включал так как доработок куча...


а точно выводится именно alt?
Там еще в титле такое прописано.
Плагинов никаких нету по управлению выводом картинок?


Плагинов нет, Альт и тайтл (на ссылке) выводятся в данном случае название товара,
Что-то не могу понять....(((


Мне кажется дело в самом шаблоне у меня шаблон shopos-paradise_new...
в файле product_info_v1.html
Помогите плиз...все перепроверил все замены и дополнения...но...все по старому ((


видимо там вывод не такой какой нужно.
сделайте вывод картинок как это реализовано в шаблоне default


Проблема была все-таки в выводе картинок в самом шаблоне парадайс. Если у кого-то такая проблема то я переписал так.

<!-- more images -->
    {if $PRODUCTS_MO_IMAGES}
        '<table width="100%" border="0">
            <tr>
                {foreach name=mo_pic item=img_values from=$mo_img}
                    <td align="center"  width="50%">
                        {$img_values.PRODUCTS_MO_IMAGE_BLOCK}
                    </td>
                    {if $smarty.foreach.mo_pic.iteration % 3 == 0 && !$smarty.foreach.mo_pic.last}
                  </tr><tr>
                  {/if}
              {/foreach}
          </tr>
   
    {/if}
    {$PRODUCTS_MO_IMAGE_BLOCK}
    </table>
    <br />
    <!-- more images eof -->
    {if $PRODUCTS_IMAGE_LINK!=''}
      <a href="{$PRODUCTS_IMAGE_LINK}" onclick="window.open(this.href); return false;">{$PRODUCTS_TEXT_ZOOM}</a><br />
    {/if}


вывод картинок по 3 штуки в рядок а не столбцом. Стырено с default  и немножко переделано.



Проблема была все-таки в выводе картинок в самом шаблоне парадайс. Если у кого-то такая проблема то я переписал так.
<!-- more images -->
    {if $PRODUCTS_MO_IMAGES}
        '<table width="100%" border="0">
            <tr>
                {foreach name=mo_pic item=img_values from=$mo_img}
                    <td align="center"  width="50%">
                        {$img_values.PRODUCTS_MO_IMAGE_BLOCK}
                    </td>
                    {if $smarty.foreach.mo_pic.iteration % 3 == 0 && !$smarty.foreach.mo_pic.last}
                  </tr><tr>
                  {/if}
              {/foreach}
          </tr>
   
    {/if}
    {$PRODUCTS_MO_IMAGE_BLOCK}
    </table>
    <br />
    <!-- more images eof -->
    {if $PRODUCTS_IMAGE_LINK!=''}
      <a href="{$PRODUCTS_IMAGE_LINK}" onclick="window.open(this.href); return false;">{$PRODUCTS_TEXT_ZOOM}</a><br />
    {/if}


вывод картинок по 3 штуки в рядок а не столбцом. Стырено с default  и немножко переделано.


а у меня не заработало на шаблоне paradise, не выводиться описание картинок да и не сохраняется в админке/категория товаров/ картинки/описание. Строка описание товара появилась, а вводимое значение не сохраняется в базе видимо.
Проблема вывода описания осталась, сайт http://babymgorka.by/
Помогите плиз!!!!



не выводиться описание картинок да и не сохраняется в админке/категория товаров/ картинки/описание. Строка описание товара появилась, а вводимое значение не сохраняется

значит установили хак не правильно. по каждому пункту пройдитесь.




не выводиться описание картинок да и не сохраняется в админке/категория товаров/ картинки/описание. Строка описание товара появилась, а вводимое значение не сохраняется

значит установили хак не правильно. по каждому пункту пройдитесь.

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


Источник



Copyright ShopOS