Модуль для Joomla для сохранения материала в сессию

  • 13 Ответов
  • 179 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн Latmi

Уважаемые, опытные мастера.  !

Подскажите пожалуйста. Как реализовать сохранение материалов (добавить в избранное) Joomla посетителем сайтом без его регистрации?
Материалы с дополнительными полями сделаны через компонент K2. Нужна кнопка в материале "Добавить в избранное", на которую посетитель сайта может нажать, и добавить таким образом к себе в избранное.
А потом этот материал вывести нужно.

*

Оффлайн Septdir

  • *******
  • 2084
  • [+]106 / [-]0
  • JoomlaZen
    • Просмотр профиля
    • Игорь «Septdir» Бердичевский
Ну в сеесию можно добавить простым AJAX а вот с выводом посложнее. Хотя на k2 тоже особой проблемы нет. Все это можно сделать за один плагин, хоть и немного велосипедно.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты: Сайт | skype:septdir | Telegram | VK | Facebook | Twiter | Все контакты

*

Оффлайн Latmi

Ну в сеесию можно добавить простым AJAX а вот с выводом посложнее. Хотя на k2 тоже особой проблемы нет. Все это можно сделать за один плагин, хоть и немного велосипедно.

Я правильно понимаю что вывод так же через K2 модуль, только в шаблоне нужно добавить условие: если такой-то материал добавлен в сессию, то тогда вывести его в шаблон?

*

Оффлайн robert

Не совсем понял, нужно сохранить сами материалы или просто добавить их в список избранных. Если последнее, то просто запишите их идентификаторы (ID, алиас) в cookies и проверять их при выводе, сессия же уничтожается вместе со всеми данными через заданный интервал времени.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн Septdir

  • *******
  • 2084
  • [+]106 / [-]0
  • JoomlaZen
    • Просмотр профиля
    • Игорь «Septdir» Бердичевский
Я правильно понимаю что вывод так же через K2 модуль, только в шаблоне нужно добавить условие: если такой-то материал добавлен в сессию, то тогда вывести его в шаблон?
Ну в k2 можно и без модуля. там есть event чтобы менять запрос в базу. Ну а та если вам лень делать могу за вас написать 50$ хвтатит. Контакты в подписи
Не совсем понял, нужно сохранить сами материалы или просто добавить их в список избранных. Если последнее, то просто запишите их идентификаторы (ID, алиас) в cookies и проверять их при выводе, сессия же уничтожается вместе со всеми данными через заданный интервал времени.
Ну куки тоже не вечны. если бы только зареганым я бы в базу засунул. Кстати проверять при выводе все таки поздно. Надо запрос с коркетировать. Инача будут пустые старницы
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты: Сайт | skype:septdir | Telegram | VK | Facebook | Twiter | Все контакты

*

Оффлайн Latmi

Не совсем понял, нужно сохранить сами материалы или просто добавить их в список избранных. Если последнее, то просто запишите их идентификаторы (ID, алиас) в cookies и проверять их при выводе, сессия же уничтожается вместе со всеми данными через заданный интервал времени.

Да, добавить в избранное. Мне время сессии хватит. Спасибо за совет, только есть проблема которую пока не могу решить:
  • как в шаблоне модуля правильно вывести материал K2 циклом по его ID и так чтобы он ничего другого не показывал?

    *

    Оффлайн Latmi

    Ну в k2 можно и без модуля. там есть event чтобы менять запрос в базу. Ну а та если вам лень делать могу за вас написать 50$ хвтатит. Контакты в подписиНу куки тоже не вечны. если бы только зареганым я бы в базу засунул. Кстати проверять при выводе все таки поздно. Надо запрос с коркетировать. Инача будут пустые старницы

    Как же этот event прописать чтобы обойтись без модуля? Делать совсем не лень, и денег не жалко но очень хочется сделать самому, но мозгов видимо не хватает уже 3-й день мучаю эту задачу.

    *

    Оффлайн Septdir

    • *******
    • 2084
    • [+]106 / [-]0
    • JoomlaZen
      • Просмотр профиля
      • Игорь «Septdir» Бердичевский
    Есть ивент onbeforesentquery который позволяет поменять сам запрос в базу. Так как примеру можно к url добавить параметр и добавить проверку что если он есть в запрос добавить id in
    Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
    *Интересная задача, Деньги или Бартер. Натурой не беру!
    ________
    Мои Контакты: Сайт | skype:septdir | Telegram | VK | Facebook | Twiter | Все контакты

    *

    Оффлайн Septdir

    • *******
    • 2084
    • [+]106 / [-]0
    • JoomlaZen
      • Просмотр профиля
      • Игорь «Septdir» Бердичевский
    Да, добавить в избранное. Мне время сессии хватит. Спасибо за совет, только есть проблема которую пока не могу решить:
    • как в шаблоне модуля правильно вывести материал K2 циклом по его ID и так чтобы он ничего другого не показывал?
      Ни как чтобы корректно работало надо править запрос а он лежит в helper
      Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
      *Интересная задача, Деньги или Бартер. Натурой не беру!
      ________
      Мои Контакты: Сайт | skype:septdir | Telegram | VK | Facebook | Twiter | Все контакты

      *

      Оффлайн Latmi

      Ни как чтобы корректно работало надо править запрос а он лежит в helper

      я все таки сделал вывод в плагине:
      <?php
      $array
      [];
      $array[] = "ID материала записанного в сессию";



      foreach (
      $items as $key=>$item):
      foreach(
      $array as $id):
          if (
      $item->id == $id) {?>

              <div class="popularList">
              <div class="popularItem">
              <div class="popularPic"><a href="<?=$item->link?>"><img height="280" src="<?=$item->imageLarge?>" alt="<?=$item->title?>" title="<?=$item->title?>" /></a></div>
              <div class="popularDesc">
              <?php foreach($item->extraFields as $keyField => $valueField):
                  
      $extraFields[$keyField] = $valueField->value;
              endforeach;
              if(
      $extraFields["ploshad"] != ""):?>
      <div class="popularPloshad"><?=$extraFields["ploshad"]?> <span>м2</span></div><?endif;
              if($extraFields["summ_price"] != ""):?><div class="popularPrice"><?=number_format($extraFields["summ_price"], 0, '.', ' ')?> <span>руб. в месяц</span></div><?endif;?>
              </div>
              </div>
              </div> <?php
          
      }
      endforeach;
      endforeach;
      ?>


      И работает) Осталось только записать через AJAX по ссылке в сессию.

      Скорее всего я сделал очень криво и неправильно. Прокомментируйте пожалуйста.

      *

      Оффлайн robert

      Мне время сессии хватит.
      Не понял: у вас вечная сессия? Если нет, то откуда возьмется список избранных в следующий заход посетителя на сайт?
      я все таки сделал вывод в плагине:
      Скорее всего я сделал очень криво и неправильно. Прокомментируйте пожалуйста.
      -Наверное, все-таки $array = [];, а не $array[];
      -Выборку по IDs нужно делать при SQL-запросе, а не после.
      -И самое главное: откуда возьмете содержимое $array? Об этом я уже написал в начале этого сообщения.
      • Не будь паразитом, сделай что-нибудь самостоятельно!
      • В личке и по Skype не даю советов.

      *

      Оффлайн Latmi

      Не понял: у вас вечная сессия? Если нет, то откуда возьмется список избранных в следующий заход посетителя на сайт?-Наверное, все-таки $array = [];, а не $array[];
      -Выборку по IDs нужно делать при SQL-запросе, а не после.
      -И самое главное: откуда возьмете содержимое $array? Об этом я уже написал в начале этого сообщения.

      содержимое array из невечной сессии, ибо после ухода с сайта или закрытия браузера этот список должен очищаться.
      <?php

      session_start
      ();





      $id $this->item->id;

      if (isset(
      $_SESSION['id']))
      {
          if (
      count($_SESSION['id']) < 3)
          {
             
              
      $_SESSION['id'][] = $id;
          }
          else {
            
              for (
      $i=1$i<3$i++)
              {
                  
      $_SESSION['id'][$i-1] = $_SESSION['id'][$i];
              }
              
      $_SESSION['id'][4] = $id;
          }

      } else {
          
      $_SESSION['id'] = array();
          
      $_SESSION['id'][] = $id;
      }

      session_write_close();
      ?>


      *

      Оффлайн Latmi

      А вот как по клику добавить непонятно, пока что добавляется при открытии страницы самого материала. Пробовал через AJAX - не получилось.

      *

      Оффлайн robert

      В контексте Joomla сессия уже запущена, так что нет смысла еще раз ее запускать. Получите ее методом JFactory:getSession().
      Используйте array_shift вместо своих сложных телодвижений по ограничению размер массива id.
      По AJAX - вам нужен скрипт, который отлавливает новый ID и записывает его в сессию. Код можно добавить прямо в какой-нибудъ шаблон компонента и пропишите в качестве AJAX-url путь к соответствующему view.
      • Не будь паразитом, сделай что-нибудь самостоятельно!
      • В личке и по Skype не даю советов.