В описании товара в VirtueMart вставляю статью (article) через плагин NoNumber Articles Anywhere. В самой статье используется php код, в который необходимо передать id товара. ($this->product->virtuemart_product_id дает ошибку при загрузке страницы) Для чего использую сессиию Код (PHP): $session =& JFactory::getSession(); $session->set('vm_id', $this->product->virtuemart_product_id ); // в шаблоне товара . . . $session =& JFactory::getSession(); // в статье $vm_base_id = $session->get( 'vm_id', 0 ); Проблема заключается в том, что при подгрузке страницы остается старое значение, которое изменяется только после обновления текущей страницы. Также пробовал через $_SESSION['vm_id'] Также пробовал передавать значение через таблицу в БД Для очистки кэша использовал Код (PHP): $cache =& JFactory::getCache('com_k2'); //(k2 тоже использовал) $cache->clean(); $cache =& JFactory::getCache('com_content'); $cache->clean(); Эффекта ни дает ни один способ, кэш в любом случае выдает старое значение. Вопрос - как передать актуальное значение ID товара из VM, либо очистить кэш перед загрузкой переменной из сессии.
Имеется ввиду при клике на товар в списке и переходе на страничку товара. Т.е. при открытии странички товара остается старое значение в сессии, хотя оно уже изменено на момент чтения. Если страничку обновить, то значение также обновляется на корректное. Есть две странички для примера. Блок где указывается стоимость и скидка корректно отображается только после обновления. Значения ID товара для расчета скидки и стоимости пытаюсь передать через сессию. https://online.artpodarkov.ru/index...niki/plat-mk-legler-domik-u-ozera-2021-detail https://online.artpodarkov.ru/index...niki/plat-mk-legler-derevo-lyubvi-2021-detail --- добавлено: 08.02.2022, первое сообщение размещено: 08.02.2022 --- из шаблона товара Код (PHP): <?php // Product Description if (!empty($this->product->product_desc)) { $cache =& JFactory::getCache('com_k2'); $cache->clean(); $cache =& JFactory::getCache('com_content'); $cache->clean(); $session =& JFactory::getSession(); $session->set('vm_id', $this->product->virtuemart_product_id ); session_start(); //через сессию php тоже пробую $_SESSION['vm_id1'] = $this->product->virtuemart_product_id; //$vm_id = $session->get( 'vm_id', 0 ); //print_r($vm_id); //здесь данные корректны, если раскоментировать. // пробовал передать/получить через таблицу $db=JFactory::getDbo(); $q = $db->getQuery(true); $q->update($db->quoteName('#__zzdop_tempvar')); $q->set($db->quoteName('varzn').'='.$db->quote($this->product->virtuemart_product_id)); $q->where($db->quoteName('varname') . '=' . $db->quote('vm_id_gl')); $db->setQuery($q) ->execute(); ?> <div class="product-description"> <?php /** @todo Test if content plugins modify the product description */ ?> <span class="title"><?php //echo vmText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE') ?></span> <?php echo $this->product->product_desc; ?> ; . . в подключаемом блоке Код (PHP): $session =& JFactory::getSession(); $vm_base_id = $session->get( 'vm_id', 0 ); $session->clear('vm_id'); print_r($vm_base_id); echo '<br />'; echo $_SESSION['vm_id1']; echo '<br />'; $db=JFactory::getDbo(); $q = $db->getQuery(true); $q->select($db->quoteName(array('varzn'))); $q->from($db->quoteName('#__zzdop_tempvar')); $q->where($db->quoteName('varname') . '=' . $db->quote('vm_id_gl')); $db->setQuery($q); $varzn=$db->loadObjectList(); $vm_base_id1=$varzn[0]->varzn; print_r($vm_base_id1); Применяй теги редактора для кода .М Корректные данные появляются только после обновления страницы
Пробуй очистить переменную в сессии , перед присвоением значения перенной. и убери из кода & Код (PHP): $session = JFactory::getSession(); $session->clear('vm_id'); $session->set('vm_id', $this->product->virtuemart_product_id );
Эффекта не дало. Т.е. если вызвать переменную из сессии в шаблоне товара даже после загрузки блока description - значение будет актуальное. В подгружаемом же описании - прошлое значение. Попробовал через запись в файл - тоже самое - старое содержимое в файле. Напрашивается идея о передаче ID в html коде страницы, но как реализовать такое без перегрузки всей страницы плохо представляю..
переход может быть со страницы категории товаров так и прямым переходом по ссылке - эффект одинаковый. PS честно говоря, идеи, кроме как поставить разовое автообновление страницы, закончились. Может быть еще есть какие то способы передачи значений, кроме сессии, файла, таблицы, константы (define(), в целевом блоке не появляется)... --- добавлено: 08.02.2022, первое сообщение размещено: 08.02.2022 --- Если вопрос - корректно ли читается реферер - да, корректно. С глобальными переменными вроде как все в порядке.