Передача значения переменной

Тема в разделе "Программирование", создана пользователем James50, 08.02.2022.

  1. Offline

    James50 Недавно здесь

    Регистрация:
    08.02.2022
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    В описании товара в VirtueMart вставляю статью (article) через плагин NoNumber Articles Anywhere.
    В самой статье используется php код, в который необходимо передать id товара.
    ($this->product->virtuemart_product_id дает ошибку при загрузке страницы)
    Для чего использую сессиию

    Код (PHP):
    1. $session =& JFactory::getSession();
    2. $session->set('vm_id', $this->product->virtuemart_product_id ); // в шаблоне товара
    3. .
    4. .
    5. .
    6. $session =& JFactory::getSession();    // в статье
    7. $vm_base_id = $session->get( 'vm_id', 0 );



    Проблема заключается в том, что при подгрузке страницы остается старое значение, которое изменяется только после обновления текущей страницы.
    Также пробовал через $_SESSION['vm_id']
    Также пробовал передавать значение через таблицу в БД
    Для очистки кэша использовал
    Код (PHP):
    1. $cache =& JFactory::getCache('com_k2'); //(k2 тоже использовал)
    2.   $cache->clean();
    3.   $cache =& JFactory::getCache('com_content');
    4.   $cache->clean();


    Эффекта ни дает ни один способ, кэш в любом случае выдает старое значение.
    Вопрос - как передать актуальное значение ID товара из VM, либо очистить кэш перед загрузкой переменной из сессии.
     
    Последнее редактирование: 08.02.2022
  2.  
  3. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 812
    Симпатии:
    771
    Пол:
    Мужской
    Что значит подгрузка, Аякс ?
     
  4. Offline

    James50 Недавно здесь

    Регистрация:
    08.02.2022
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Имеется ввиду при клике на товар в списке и переходе на страничку товара.
    Т.е. при открытии странички товара остается старое значение в сессии, хотя оно уже изменено на момент чтения. Если страничку обновить, то значение также обновляется на корректное.
    Есть две странички для примера.
    Блок где указывается стоимость и скидка корректно отображается только после обновления. Значения 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):
    1. <?php
    2.    // Product Description
    3.    if (!empty($this->product->product_desc)) {
    4.  
    5. $cache =& JFactory::getCache('com_k2');
    6. $cache->clean();
    7. $cache =& JFactory::getCache('com_content');
    8. $cache->clean();
    9.  
    10. $session =& JFactory::getSession();
    11. $session->set('vm_id', $this->product->virtuemart_product_id );
    12.  
    13. session_start();  //через сессию php тоже пробую
    14. $_SESSION['vm_id1'] = $this->product->virtuemart_product_id;
    15.  
    16. //$vm_id = $session->get( 'vm_id', 0 );
    17. //print_r($vm_id); //здесь данные корректны, если раскоментировать.
    18.  
    19. // пробовал передать/получить через таблицу
    20. $db=JFactory::getDbo();
    21. $q = $db->getQuery(true);
    22.    $q->update($db->quoteName('#__zzdop_tempvar'));
    23.    $q->set($db->quoteName('varzn').'='.$db->quote($this->product->virtuemart_product_id));
    24.    $q->where($db->quoteName('varname') . '=' . $db->quote('vm_id_gl'));
    25. $db->setQuery($q)
    26.     ->execute();
    27.  
    28.     ?>
    29.   <div class="product-description">
    30.    <?php /** @todo Test if content plugins modify the product description */ ?>
    31.      <span class="title"><?php //echo vmText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE') ?></span>
    32.    <?php echo $this->product->product_desc; ?>
    33. ;

    .
    .
    в подключаемом блоке
    Код (PHP):
    1. $session =& JFactory::getSession();
    2. $vm_base_id = $session->get( 'vm_id', 0 );
    3. $session->clear('vm_id');
    4. print_r($vm_base_id);
    5. echo '<br />';
    6.  
    7. echo $_SESSION['vm_id1'];
    8. echo '<br />';
    9.  
    10. $db=JFactory::getDbo();
    11. $q = $db->getQuery(true);
    12.  
    13.    $q->select($db->quoteName(array('varzn')));
    14.    $q->from($db->quoteName('#__zzdop_tempvar'));
    15.    $q->where($db->quoteName('varname') . '=' . $db->quote('vm_id_gl'));
    16.  
    17.    $db->setQuery($q);
    18.    $varzn=$db->loadObjectList();
    19.    $vm_base_id1=$varzn[0]->varzn;
    20. print_r($vm_base_id1);

    Применяй теги редактора для кода .М
    Корректные данные появляются только после обновления страницы
     
    Последнее редактирование модератором: 08.02.2022
  5. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 812
    Симпатии:
    771
    Пол:
    Мужской
    Пробуй очистить переменную в сессии , перед присвоением значения перенной. и убери из кода &
    Код (PHP):
    1. $session = JFactory::getSession();
    2. $session->clear('vm_id');
    3. $session->set('vm_id', $this->product->virtuemart_product_id );
     
  6. Offline

    James50 Недавно здесь

    Регистрация:
    08.02.2022
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Эффекта не дало.
    Т.е. если вызвать переменную из сессии в шаблоне товара даже после загрузки блока description - значение будет актуальное.
    В подгружаемом же описании - прошлое значение.
    Попробовал через запись в файл - тоже самое - старое содержимое в файле.
    Напрашивается идея о передаче ID в html коде страницы, но как реализовать такое без перегрузки всей страницы плохо представляю..
     
    Последнее редактирование: 08.02.2022
  7. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 812
    Симпатии:
    771
    Пол:
    Мужской
    а реферер, т.е. предыдущая ссылка откуда переход ?
     
  8. Offline

    James50 Недавно здесь

    Регистрация:
    08.02.2022
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    переход может быть со страницы категории товаров так и прямым переходом по ссылке - эффект одинаковый.

    PS честно говоря, идеи, кроме как поставить разовое автообновление страницы, закончились. Может быть еще есть какие то способы передачи значений, кроме сессии, файла, таблицы, константы (define(), в целевом блоке не появляется)...
    --- добавлено: 08.02.2022, первое сообщение размещено: 08.02.2022 ---
    Если вопрос - корректно ли читается реферер - да, корректно. С глобальными переменными вроде как все в порядке.
     

Поделиться этой страницей

Загрузка...