Настраиваемые поля virtuemart имеют ограничение на максимальное количество символов, которое в них можно сохранить. Например, у поля с типом редактор это 4 095 символов.
Если у товара большой список характеристик, которые выводятся в отдельной вкладке с помощью поля с типом Редактор, то лимита может быть недостаточно.
Есть два пути решения этой проблемы.
- Разместить характеристики в одном поле с описанием (у данного поля лимит 18 400 символов), вставив между ними разделитель.
- Вывести в карточке товара стандартный материал joomla. У материала лимит на количество символов гораздо выше.
Вставка характеристик внутри описания
В этом способе мы добавляем описание и характеристики в одном поле и вставляем между ними разделитель.
После этого внесем правки в шаблон карточки товара /components/com_virtuemart/views/productdetails/tmpl/default.php (либо в переопределенный файл /templates/имя_шаблона/html/com_virtuemart/productdetails/default.php).
Заменим код вывода описания товара
1 |
echo $this->product->product_desc; |
на
1 2 |
$desc = explode('<hr id="system-readmore" />', $this->product->product_desc); echo $desc[0]; |
Для вывода заголовка вкладки (будет работать только если на сайте вкладки настроены по этой статье) с характеристиками добавим этот код
1 2 3 4 5 6 7 8 9 |
<?php $desc = explode('<hr id="system-readmore" />', $this->product->product_desc); if(array_key_exists('1', $desc)){ ?> <li> <a href="#option" aria-controls="option" role="tab" data-toggle="tab"><?php echo 'Характеристики'; ?></a> </li> <?php } ?> |
Для вывода контента характеристик добавим этот код
1 2 3 4 5 |
<?php if (array_key_exists('1', $desc)) { ?> <div role="tabpanel" class="tab-pane fade" id="option"> <?php echo $desc[1]; ?> </div> <?php } ?> |
В результате описание и характеристики будут выводиться в разных вкладках.
Вставка материала joomla в карточку товара
Если предыдущий способ не сработал, то можно вывести в карточке товара стандартный материал joomla с практически любым количеством символов (в joomla для материала используется тип данных longtext). Здесь возможны несколько вариантов.
Вывод одного и того же материала во всех товара
Самый простой вариант. Для вывода материала в шаблон карточки товара добавьте этот код
1 2 3 4 5 6 7 8 9 10 |
<?php if(!class_exists('ContentModelArticle')) require_once JPATH_ROOT.'/components/com_content/models/article.php'; $article = new ContentModelArticle; $id = '7'; // id материала $youArticle = $article->getItem($id); //Выводим заголовок echo $youArticle->title; //Выводим текст echo $youArticle->introtext; ?> |
Узнать id материала можно в админке в списке всех материалов.
Вывод разных материалов
Создадим новое настраиваемое поле с типом Строка и позицией вывода article, в котором будет указываться id материала для вывода.
Прикрепим поле к товару и укажем id нужного материала.
В шаблоне карточки товара добавим код
1 2 3 4 5 6 7 8 9 10 |
<?php if(!class_exists('ContentModelArticle')) require_once JPATH_ROOT.'/components/com_content/models/article.php'; $article = new ContentModelArticle; $id = $this->product->customfieldsSorted['article'][0]->customfield_value; // id материала из настроек поля $youArticle = $article->getItem($id); //Выводим заголовок echo $youArticle->title; //Выводим текст echo $youArticle->introtext; ?> |
Ниже пример кода вывода материала в отдельной вкладке (будет работать только если на сайте вкладки настроены по этой статье).
Для вывода заголовка используйте этот код
1 2 3 |
<?php if (!empty($this->product->customfieldsSorted['article'])) { ?> <li><a href="#article" aria-controls="article" role="tab" data-toggle="tab"><?php echo 'Материал'; ?></a></li> <?php } ?> |
Для вывода контента вкладки используйте этот код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php if (!empty($this->product->customfieldsSorted['article'])) { ?> <div role="tabpanel" class="tab-pane fade" id="article"> <?php if(!class_exists('ContentModelArticle')) require_once JPATH_ROOT.'/components/com_content/models/article.php'; $article = new ContentModelArticle; $id = $this->product->customfieldsSorted['article'][0]->customfield_value; // id материала из настроек поля $youArticle = $article->getItem($id); //Выводим заголовок echo $youArticle->title; //Выводим текст echo $youArticle->introtext; ?> </div> <?php } ?> |
В результате получим следующее.
Надеюсь, что примеры кода из статьи помогут в вашей работе над сайтом.
Валерий
А через бд разве нельзя снять ограничения? Или это чем то грозит?
Я например, частенько снимаю ограничения через бд, в описании товара или в описании категории.
admin
Через БД можно снять ограничения, но после обновления virtuemart все правки придется вносить заново.
Aleksander
Большое спасибо за статью. В прошлой теме очень помогли с добавлением табов. Теперь вот по этой статье можно удобно добавить вкладку с материалом. Супер.
admin
Рад, что статья оказалась полезной.
Алексей
Спасибо за статью! Вот только один вопрос - а можно как то метки (теги) статьи тоже вывести в карточке товара?
admin
Попробуйте этот код
Алексей
Я если правильно понял так должен этот кусок выглядеть в целом?
admin
Примерно так.
RRR
Спасибо за статью, очень помогла!!
admin
Рад, что статья оказалась полезной.
Vliv
Здравствуйте!
Вот такой вопрос. если делать вывод в карточке товара материал joomla, как сделать чтобы в заголовке выводилось не "Материал", а непосредственно заголовок самого материала?
admin
Здравствуйте!
Можно отключить показ заголовка в настройках настраиваемого поля и стилизовать вывод заголовка материала.
Vliv
немного не правильно вопрос задал. Имеется ввиду чтобы в заголовке таба показывался заголовок материала, а не тот, что в коде прописан (в данном случае "Материал"). Это для того чтобы при необходимости можно было бы добавлять несколько материалов.
admin
Нужно перенести код до кода вывода табов.
Для каждого материала нужно использовать вместо $id уникальное имя для идентификатора статьи.
В заголовке таба нужно прописать
Если не получится, то смотреть нужно непосредственно на сайте. Для этого пришлите доступ к админке и ftp на admin@virtuemart.su
Vliv
Что-то никак(( Скинул доступы на почту.
inst54ru
СПАСИБО!!
admin
Рад, что статья пригодилась в работе.
ivengo
Доброго дня, пытаюсь в airshop сделать вкладку "характеристики", чтобы текст там был, резмещенный в админке описания товара после разделителя, но ничего не получается. помогите...
admin
Здравствуйте!
Посмотрите в этой теме на форуме поддержки.
Александр
Я не понял про вставки кода в шаблон карточки товара. Куда конкретно вставлять???
Александр
Спасибо что ли не сказал? Так объясните дураку: куда ваш код вставлять - скажу! Почему нет указания на место вставки, хотя бы примерно? Мне надо материал вставить в карточку товара
Александр
Зачем писать статьи, чтобы потом удалять комментарии???? Допишите в текст место вставки кода и вас не будут доставать. Или ответьте по-человечески!!!! Алле, модератор!
admin
Никто комменты не удаляет. При публикации они на модерацию попадают.
Весь код нужно вставлять вместо стандартного вывода опичания
Александр
Какой весь? Куда вставлять? Я сделал все как вы написали, но в карточке пусто.
Александр
И у меня нет шаблона default.php
Александр
Все разрешилось! Только шаблон называется multiadd! Почему-то!!! Спасибо за помощь, но вы как-то в своем продукте лучше разбирайтесь что ли.