[Помогите] Сравнение товаров - изменить вывод Краткого описания

Тема в разделе "OpenCart", создана пользователем Alexx00, 23 июл 2014.

  1. Alexx00

    Alexx00

    Регистрация:
    24 апр 2013
    Сообщения:
    66
    Симпатии:
    29
    Приветствую!
    Подскажите, плз, как корректно можно изменить вывод описания товара при Сравнении товара?
    С учетом того, что описание товара сделано не через Атрибуты - хар-ки, а, к примеру через табличный вывод описания или обычный хтмл в поле Описания товара.
    Сейчас, если в описании присутствует хтмл разметка, то на стр. Сравнения - описание идет сплошным тектовым блоком, без хтмл разметки и пр. Как сделать чтобы сохранялась оригинальная хтмл разметка?

    В файле catalog\controller\product\compare.php.
    Код:
    'description'  => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, 200) . '..',
    Смогла только увеличить лимит выводимых символов с 200 до 1000:Smile: Убрать вообще ограничение тоже было бы не плохо..

    Заранее, спб. за подсказки!

    P.S. Или же чтобы всё норм. отображалось нужно обязательно выводить хар-ки через Атрибуты?....
     
  2. zvizdunov

    zvizdunov

    Регистрация:
    31 май 2014
    Сообщения:
    105
    Симпатии:
    33
    Что такое " хтмл разметка" ?
    Я не понял, нужно менять функционал или изменить представление?

    Есть html, который представляет собой некую информацию, условно разделённую на блоки.
    Есть css, который отвечает за то, как эта информация будет представлена на экране.
    Если нужно оформление, то нужно смотреть страницу и создавать таблицы стилей css для html и тогда информация будет отображаться так, как нужно.
     
  3. Alexx00

    Alexx00

    Регистрация:
    24 апр 2013
    Сообщения:
    66
    Симпатии:
    29
    Функционал менять не надо, хотелось бы изменить представление вывода описания...
    Если описание товара сделано, к примеру через таблицу - в Сравнении и выводилась таблица...

    Т.е. чтобы в блоке Краткое описание на стр. Сравнения - инфо выводилась, так, как она представлена в карточке товара...

    P.S. Может есть какой-то модуль для подобного?
     
  4. zvizdunov

    zvizdunov

    Регистрация:
    31 май 2014
    Сообщения:
    105
    Симпатии:
    33
    Чтобы в html сделать таблицу, достаточно элементу присвоить значение
    display:table

    По поводу модуля не знаю, но у Вас вопрос в верстке, именно она отвечает за представление вывода описания.
     
  5. Alexx00

    Alexx00

    Регистрация:
    24 апр 2013
    Сообщения:
    66
    Симпатии:
    29
    Ну, видимо в Опенкарт стр. Сравнения заточена под корректный вывод именно Атрибутов....
    Т.к. в данном случае присвоить значение display:table к чему-либо не подходит, в описании товара может быть любая хтмл-разметка, как я и писала ранее, табличные данные, списки (ul, li) и пр.
    И вот это всё не выводится (не подгружается, не знаю уже как правильно написать) в блоке Краткое описание на стр. Сравнения. Выводится просто текст сплошняком...

    И, да, я в курсе, что Атрибуты собственно для того по > части и существуют, чтобы использвать их в представлении товара на стр. Сравнения.
    Но, в данном случае интересует вариант без использования Атрибутов, но с данными из обычного Описания товара. Чтобы выводилось, как есть.
     
  6. zvizdunov

    zvizdunov

    Регистрация:
    31 май 2014
    Сообщения:
    105
    Симпатии:
    33
    Всё, теперь понял.
    Любую html разметку задать не получится, можно разбить текст на строки, так же как в исходном описании.
    Для этого нужно блоку с описанием, присвоить свойство
    white-space:pre;
    А затем подправить размер шрифта и расстояние между строками.
     
  7. Alexx00

    Alexx00

    Регистрация:
    24 апр 2013
    Сообщения:
    66
    Симпатии:
    29
    Спасибо за наводку!
    НЕмного помогло использование "pre-wrap", с просто "pre" - всё в одну строку и без переносов, если не табл.....
    Но, если идет список (Ul, li) - переноса на др. строку нет....

    Я добавила св-во сразу непосредственно в код, отвечающий за вывод этого блока (Краткое описание) .../template/product/compare.tpl
    Код:
    <tr>
            <td><?php echo $text_summary; ?></td>
            <?php foreach ($products as $product) { ?>
            <td class="description" style="white-space:pre-wrap; vertical-align: top;"><?php echo $products[$product['product_id']]['description']; ?></td>
            <?php } ?>
          </tr>
    Но, как я понимаю, "один в один" тут в любом случае не получится с простым описанием, значит такая логика Опенкарта срабатывает в данном случае?
    Выходит, только через Атрибуты добавлять, чтобы все выводилось в сравнении корректно?
    Но, мне, к примеру, в самом описании товара - удобней чтобы было обычное описание в том виде, как оно добавляется без всех этих Атибутов....

    Замкнутый круг какой-то...
     
  8. svitlo

    svitlo

    Регистрация:
    17 фев 2013
    Сообщения:
    118
    Симпатии:
    87
    Уважаемый автор нащли решение? У меня такая же проблема <?php echo (strlen($description) > 400 ? utf8_substr(strip_tags(html_entity_decode($description, ENT_QUOTES, 'UTF-8')), 0, 400) . '..' : $description); ?> не дает вывести штмл как вы это решили?
     
  9. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Функция strip_tags() удаляет html и php теги из текста. Думаю, дальше и без объяснений понятно, что делать.
    Но тогда функция utf8_substr() может обрезать какой-нибудь тег, так что желательно и её тоже убрать (но тогда тексты не будут укорачиваться).

    В общем, если обрезка длинных описаний не нужна можно этот код привести к виду:
    PHP:
    <?php echo $description?>
    Если же обрезка нужна, то лучше ничего не трогать.

    А если у вас нет html разметки и в текстах, длина которых меньше 400 символов, значит она удаляется ещё раньше, смотрите контроллер.