VM 2.x Закладки в карточке товара

В этом случае страница все равно содержит весь контент вместе.
например: описание товара, характеристики.
Если описание товара вы пишите самостоятельно, то в случае с характеристиками они не уникальны.
Основная идея оставить урлы с уникальным контентом, а стандартный перечень характеристик скрыть от поисковиков.
Что то вы мудрите совсем ненужное... Характеристики как минимум у всех одинаковы и нужны для выгрузка в каталоги, например тот же я.маркет. Ну а чтобы скрыть их - дастоточно засунуть в ноуиндекс, но опять же - характеристики у всех одинаковы и алгоритмы пс это понимают, иначе была бы беда. Либо вы не корректно ставите вопрос, либо действительно задумали бесполезное дело.
 
Здравствуйте! Спасибо за детальное разъяснение по добавлению вкладок в карточку товара. Если кому не трудно, подскажите, возможно ли так же в табах вывести материал по его id? Например, нужно сделать вкладку доставка так, что бы описание бралось из материала, так как при изменении, например формы доставки, данное описание легко будет изменено администраторм магазина через админку самой Joomla. Заранее благодарю!
 
Создать модуль - например HTML-код и вставить где то так прописав в качестве id - номер ид получившегося модуля
Код:
<div class="">
           <?php
             //Поиск
             $dbo = JFactory::getDBO();
             $dbo->setQuery("SELECT * FROM #__modules WHERE id='145' ");
             $module = $dbo->loadObject();
             echo JModuleHelper::renderModule($module);
           ?>
  </div>

Второй вариант для вставки в статью модуля:
Включить плагин Content - Load Modules
(у меня на русском называется Контент - Загрузка модулей)
Создать модуль нужного типа (в т.ч можно html) дать модулю название, набрать руками название позиции (я делал совпадающее с именем (позиции ранее могло не существовать)), при необходимости отключить вывод заголовка.
Зайти в нужную статью и в требуемом месте набрать {loadposition mod_MyMod}
где
mod_MyMod- название позиции которую вы ввели в ручную. сохранить и посмотреть на фронте получилось ли.
Альтернативный вывод по имени модуля у меня не получился {loadmodule mod_MyMod} - вывел пустоту. Если кто подскажет в чем причина буду благодарен.
(данный вывод может быть полезен для вывода заранее сформированных частей на нужные вкладки)
 
Последнее редактирование:
Создать модуль - например HTML-код и вставить где то так прописав в качестве id - номер ид получившегося модуля
Код:
<div class="">
           <?php
             //Поиск
             $dbo = JFactory::getDBO();
             $dbo->setQuery("SELECT * FROM #__modules WHERE id='145' ");
             $module = $dbo->loadObject();
             echo JModuleHelper::renderModule($module);
           ?>
  </div>

Спасибо большое за ответ!
Я уже реализовал требуемое немного по другому:

Вывод материала

Код
<?php
if(!class_exists('ContentModelArticle')) require_once JPATH_ROOT.'/components/com_content/models/article.php';
$article = new ContentModelArticle;
//получаем документ с id=14
$youArticle = $article->getItem(14);
//Выводим заголовок если надо
Для просмотра ссылки Войди или Зарегистрируйся $youArticle->title;
//Выводим текст
Для просмотра ссылки Войди или Зарегистрируйся $youArticle->introtext;
//нужно еще, что-то смотри здесь var_dump($youArticle);
?>

Может кому пригодиться!
Нашел на Для просмотра ссылки Войди или Зарегистрируйся. Спасибо автору Для просмотра ссылки Войди или Зарегистрируйся!
 
Здравствуйте. Спасибо всем добрым людям за то что делитесь информацией.
Буду очень признательна, если кто-нибудь подскажет. Сразу скажу - к php я не имею совсем никакого отношения. Всё делается по принципу копипаста, гугления и логических умозаключений, поэтому прошу тапками не бросать сильно.
Суть проблемы вот в чём. Изначально вкладки были реализованы при помощи плагина DJ-VMPagebreak. То есть вся информация из всех вкладок была в описании товара. При попытке разделить эту информацию таким образом, чтобы текст каждой вкладки - это было отдельное поле в админке и соответственно в базе данных, столкнулась с проблемой. Html-код корректно отображается только если введён в Описание товара. Из остальных полей (поля для ввода текста без редактора) такой код удаляется и конструкции типа "{phocagallery view=category|categoryid=361|limitstart=0|limitcount=0}" отображаются в карточке товара как простой текст.
Вообще цель - в первой вкладке описание, во второй фотографии, загружаемые покупателыми магазина (вот с этой вкладкой как раз и проблема), в третьей вкладке информация по доставке ("{module тут_номер_модуля}", с этим проблем нет). Можно было бы сделать вторую вкладку как третья, тоже чтобы показывала текст из модуля, но как-то не хочется на каждый товар делать отдельный модуль. В общем суть проблемы в том, что поля для ввода текста обрезают код. Может кто-то с таким сталкивался? Надеюсь изложила понятно.
 
Я не понял почти ничего. Не уверен что помогу - но вы бы скриншоты разместили.
что поля для ввода текста обрезают код
чтобы было видно что за поля для ввода и что подразумевается под словом код.
я вкладки делал так (без модулей)
Код:
<ul class="flyPageTabs">
    <li class="tabProduct-description" id="tabProduct-description">
        <a href="javascript:tabSwitch('tab_1', 'tab1')" id="tab_1" class="active">
            Описание
        </a>
    </li>
    <li class="tabProduct-fields" id="tabProduct-fields">
        <a href="javascript:tabSwitch('tab_2', 'tab2')" id="tab_2">
            Сводная таблица характеристик
        </a>
    </li>
[/ul]
Код:
<div id="tabbed_box">
        <div id="tabContent">
            <div id="tab1" class="tabcontent" style="display:block;">
                    <?php
                // Product Description
                if (!empty($this->product->product_desc)) {
                    ?>
                    <div class="product-description">
                <?php /** @todo Test if content plugins modify the product description */ ?>
                    <span class="title"><?php echo JText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE') ?></span>
                <?php echo $this->product->product_desc; ?>
                    </div>
                <?php
                } // Product Description END
                ?>
            </div>
            <div id="tab2" class="tabcontent" style="display:none;">
                <?php
                    if (!empty($this->product->customfieldsSorted['normal'])) {
                    $this->position = 'normal';
                    echo $this->loadTemplate('customfields');
                    } // Product custom_fields END
                ?>
                <div class="clearboth">
                </div>
            </div>
[/div]
+ скрпит
Код:
<script  type="text/javascript">
    function tabSwitch(new_tab, new_content) {

            document.getElementById('tab1').style.display = 'none';
            document.getElementById('tab2').style.display = 'none';
            document.getElementById('tab3').style.display = 'none';
            document.getElementById('tab4').style.display = 'none';
            document.getElementById('tab5').style.display = 'none';
            document.getElementById('tab6').style.display = 'none';
            document.getElementById(new_content).style.display = 'block';

            document.getElementById('tab_1').className = '';
            document.getElementById('tab_2').className = '';
            document.getElementById('tab_3').className = '';
            document.getElementById('tab_4').className = '';
            document.getElementById('tab_5').className = '';
            document.getElementById('tab_6').className = '';
            document.getElementById(new_tab).className = 'active';      

    }
</script>

все это сделано в файле сайт.ру\components\com_virtuemart\views\productdetails\tmpl\default.php (скрипт размещен был в начале файла)
 
Изначально полное описание товара такое:
Код:
<hr title="Описание" class="system-pagebreak" />
<p></p>
<hr title="Фото от покупателей" class="system-pagebreak" />
<p>{phocagallery view=category|categoryid=49|limitstart=0|limitcount=0}</p>
<p>{module 108}</p>
<p style="text-align: center;"><strong><a href="index.php?option=com_phocagallery&amp;view=category&amp;id=00049" target="_blank" title="Добавить своё фото этого товара">Добавить своё фото</a><br /></strong>(ссылка откроется в новом окне)</p>
<hr title="Доставка" class="system-pagebreak" />
<p>{module 106}</p>
В карточке товара выглядит так:
ee0ba19eb002.jpg
[/spoil]
В шаблоне карточки товара я сделала вот что:
Код:
<div class="product_description" >
<?php echo JHtml::_('tabs.start', 'tab_group_id', array('useCookie'=>true,'startOffset'=>1)); ?>
<?php if (!empty($this->product->product_desc)) { // Product Description?>
<h4 class="title"><?php echo JHtml::_('tabs.panel', JText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE'), 'panel_1_id'); ?>
<?php echo $this->product->product_desc; ?>
<?php if (!empty($this->product->customfieldsRelatedProducts)) : ?>
<div class="product-related-products">
<h4 class="title"><?php echo JText::_('C этим товаром используются:'); ?></h4>
<?php foreach ($this->product->customfieldsRelatedProducts as $field) : ?>
<div class="product-field-type-<?php echo $field->field_type ?>"> <span class="product-field-display"><?php echo $field->display ?></span> <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span> </div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</h4>
<?php } ?>
<?php if (!empty($this->product->product_foto)) { // Фотки от покупателей?>
<h4 class="title"><?php echo JHtml::_('tabs.panel', JText::_('Фото от покупателей'), 'panel_2_id'); ?>
<?php echo $this->product->product_foto; ?>
</h4>
<?php } ?>

<?php if (!empty($this->product->product_dostavka)) { // Информация по доставке?>
<h4 class="title"><?php echo JHtml::_('tabs.panel', JText::_('Доставка'), 'panel_3_id'); ?>
<?php echo $this->product->product_dostavka; ?>
</h4>
<?php } ?>

product_foto и product_dostavka - это новые поля в базе данных. Цель - сделать вкладки в башлоне, которые будут отображаться если заполнены полы для ввода в админке в карточке товара, которые соответствуют этим полям в базе данных.
В итоге в админке имеем вот что. Смотреть на Доставка и Фото от покупателей. На первом скрине заполненная карточка товара.
[spoil]
5b7d075c7afc.jpg
[/spoil]
Нажимаем Сохранить и получаем вот что
[spoil]
30e00d5ba138.jpg
В Доставке вообще будет "{module 106}", но с ним проблем нет с обрезанием кода. Поэтому для наглядности написала Фото от покупателей в оба поля ввода, и для наглядности же сделала одно простым текстом, другое с редактором. Толку ноль :(
 
Изначально полное описание товара такое:
Код:
<hr title="Описание" class="system-pagebreak" />
<p></p>
<hr title="Фото от покупателей" class="system-pagebreak" />
<p>{phocagallery view=category|categoryid=49|limitstart=0|limitcount=0}</p>
<p>{module 108}</p>
<p style="text-align: center;"><strong><a href="index.php?option=com_phocagallery&amp;view=category&amp;id=00049" target="_blank" title="Добавить своё фото этого товара">Добавить своё фото</a><br /></strong>(ссылка откроется в новом окне)</p>
<hr title="Доставка" class="system-pagebreak" />
<p>{module 106}</p>
В карточке товара выглядит так:
ee0ba19eb002.jpg
[/spoil]
В шаблоне карточки товара я сделала вот что:
Код:
<div class="product_description" >
<?php echo JHtml::_('tabs.start', 'tab_group_id', array('useCookie'=>true,'startOffset'=>1)); ?>
<?php if (!empty($this->product->product_desc)) { // Product Description?>
<h4 class="title"><?php echo JHtml::_('tabs.panel', JText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE'), 'panel_1_id'); ?>
<?php echo $this->product->product_desc; ?>
<?php if (!empty($this->product->customfieldsRelatedProducts)) : ?>
<div class="product-related-products">
<h4 class="title"><?php echo JText::_('C этим товаром используются:'); ?></h4>
<?php foreach ($this->product->customfieldsRelatedProducts as $field) : ?>
<div class="product-field-type-<?php echo $field->field_type ?>"> <span class="product-field-display"><?php echo $field->display ?></span> <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span> </div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</h4>
<?php } ?>
<?php if (!empty($this->product->product_foto)) { // Фотки от покупателей?>
<h4 class="title"><?php echo JHtml::_('tabs.panel', JText::_('Фото от покупателей'), 'panel_2_id'); ?>
<?php echo $this->product->product_foto; ?>
</h4>
<?php } ?>

<?php if (!empty($this->product->product_dostavka)) { // Информация по доставке?>
<h4 class="title"><?php echo JHtml::_('tabs.panel', JText::_('Доставка'), 'panel_3_id'); ?>
<?php echo $this->product->product_dostavka; ?>
</h4>
<?php } ?>

product_foto и product_dostavka - это новые поля в базе данных. Цель - сделать вкладки в башлоне, которые будут отображаться если заполнены полы для ввода в админке в карточке товара, которые соответствуют этим полям в базе данных.
В итоге в админке имеем вот что. Смотреть на Доставка и Фото от покупателей. На первом скрине заполненная карточка товара.
[spoil]
5b7d075c7afc.jpg
[/spoil]
Нажимаем Сохранить и получаем вот что
[spoil]
30e00d5ba138.jpg
В Доставке вообще будет "{module 106}", но с ним проблем нет с обрезанием кода. Поэтому для наглядности написала Фото от покупателей в оба поля ввода, и для наглядности же сделала одно простым текстом, другое с редактором. Толку ноль :(
возможно повторюсь но я описывал всю подобную ситуацию тут Для просмотра ссылки Войди или Зарегистрируйся
 
возможно повторюсь но я описывал всю подобную ситуацию тут Для просмотра ссылки Войди или Зарегистрируйся
Спасибо за ссылку. Про настраиваемые поля я даже не подумала. Половина вашего поста мне недоступна по причине маленького количества сообщений на форуме, но смысл поняла.
В итоге сделала иначе. В общем-то проблема была в том, что в моих новых полях обрезался код. Решение нашла (если кому понадобится) тут:
Для просмотра ссылки Войди или Зарегистрируйся
 
Зачем использовать сторонние плагины если все можно сделать силами самой Joomla?
Например так:
В файле стилей вашего шаблона (Joomla) пропишите:
HTML:
dd {
    margin-top: 37px;
    padding: 4px 10px;
    border: 1px solid #CCCCCC;
}

dl.tabs {
    width: 100%;
    float: left;
    margin: 10px 0 -1px 0;
    z-index: 50;
}

dl.tabs dt {
  float: left;
  padding: 4px 10px;
  border-left: 1px solid #ccc;
  border-right: 1px solid #ccc;
  border-top: 1px solid #ccc;
  margin-right: 3px;
  background: #f0f0f0;
  color: #666;
}

dl.tabs dt.open {
  background: #F9F9F9;
  border-bottom: 1px solid #F9F9F9;
  z-index: 100;
  color: #000;
}

В файле:
com_virtuemart\views\productdetails\default.php
Но лучше в папке вашего шаблона (Joomla) создать файл:
/templates/{ШАБЛОН}/html/com_virtuemart/productdetailsdefault.php
в любое удобное место вставляете
PHP:
<?php
//Говорим Joomla, что мы хотим использовать панели
jimport('joomla.html.pane');
$myTabs = & JPane::getInstance('tabs', array('startOffset'=>0));
$output = '';

//Создаем панель для вкладок
$output .= $myTabs->startPane( 'pane' );

//Создаем 1 вкладку
$output .= $myTabs->startPanel( 'Описание', 'tab1' );
$output  .= '<p>'.$this->product->product_desc.'</p>';
$output .= $myTabs->endPanel();

// Создаем 2 вкладку
$output .= $myTabs->startPanel( 'Бренд', 'tab2' );
$output  .= '<p>'.$this->product->mf_name.'</p>';
$output .= $myTabs->endPanel();

// Создаем 3 вкладку
$output .= $myTabs->startPanel( 'Помощь', 'tab3' );
$output  .= '<p>Здесь текст помощи он везде одинаковый</p>';
$output .= $myTabs->endPanel();

// Создаем 4 вкладку
$output .= $myTabs->startPanel( 'Отзывы', 'tab4' );
$output  .= '<p>'.$this->loadTemplate('reviews').'</p>';
$output .= $myTabs->endPanel();

//окончание панели
$output .= $myTabs->endPane();
//Выводим
echo $output;
?>

Каждую вкладку можно менять под себя, например как у меня:
Описание:
PHP:
 // Product Description
if (!empty($this->product->product_desc)) {
//Создаем 1 вкладку
$output .= $myTabs->startPanel( JText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE'), 'tab1' );
$output .= '<div class="product-description">';
$output .= $this->product->product_desc;
$output .= '</div>';
$output .= $myTabs->endPanel();
} // Product Description END
Лишнее убираем )


здравствуйте! использовал это решение для вкладок, все работает. Появилась необходимость отобразить во вкладке настраиваемые поля, созданные через фаст селлер.
для вывода полей на сайте разработчика предлагается использовать код:
PHP:
// now call function
$pid = JRequest::getVar('virtuemart_product_id', null);
list_product_type($pid);
подробнее Для просмотра ссылки Войди или Зарегистрируйся
я попробовал добавить на вкладку следующим образом:
PHP:
                $pid = JRequest::getVar('virtuemart_product_id', null);
                if (!empty($pid)) {
                $output .= $myTabs->startPanel( 'Характеристики', 'tab2' );
                $output .= '<div>';
                $output .= list_product_type($pid);
                $output .= '</div>';
                $output .= $myTabs->endPanel();
                }
но содержимое отображается вне вкладок.
Снимок.PNG
Помогите пожалуйста разобраться
 
Назад
Сверху