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

Latmi

  • Новичок
  • 7
  • 0 / 0
Уважаемые, опытные мастера.  !

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

Septdir

  • Живу я здесь
  • 2738
  • 135 / 3
  • JoomlaZen
Ну в сеесию можно добавить простым AJAX а вот с выводом посложнее. Хотя на k2 тоже особой проблемы нет. Все это можно сделать за один плагин, хоть и немного велосипедно.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
Мои Контакты | Мой GitHub | JoomlaZen
*

Latmi

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

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

robert

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

Septdir

  • Живу я здесь
  • 2738
  • 135 / 3
  • JoomlaZen
Я правильно понимаю что вывод так же через K2 модуль, только в шаблоне нужно добавить условие: если такой-то материал добавлен в сессию, то тогда вывести его в шаблон?
Ну в k2 можно и без модуля. там есть event чтобы менять запрос в базу. Ну а та если вам лень делать могу за вас написать 50$ хвтатит. Контакты в подписи
Не совсем понял, нужно сохранить сами материалы или просто добавить их в список избранных. Если последнее, то просто запишите их идентификаторы (ID, алиас) в cookies и проверять их при выводе, сессия же уничтожается вместе со всеми данными через заданный интервал времени.
Ну куки тоже не вечны. если бы только зареганым я бы в базу засунул. Кстати проверять при выводе все таки поздно. Надо запрос с коркетировать. Инача будут пустые старницы
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
Мои Контакты | Мой GitHub | JoomlaZen
*

Latmi

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

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

    Latmi

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

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

    Septdir

    • Живу я здесь
    • 2738
    • 135 / 3
    • JoomlaZen
    Есть ивент onbeforesentquery который позволяет поменять сам запрос в базу. Так как примеру можно к url добавить параметр и добавить проверку что если он есть в запрос добавить id in
    Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
    *Интересная задача, Деньги или Бартер. Натурой не беру!
    Мои Контакты | Мой GitHub | JoomlaZen
    *

    Septdir

    • Живу я здесь
    • 2738
    • 135 / 3
    • JoomlaZen
    Да, добавить в избранное. Мне время сессии хватит. Спасибо за совет, только есть проблема которую пока не могу решить:
    • как в шаблоне модуля правильно вывести материал K2 циклом по его ID и так чтобы он ничего другого не показывал?
      Ни как чтобы корректно работало надо править запрос а он лежит в helper
      Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
      *Интересная задача, Деньги или Бартер. Натурой не беру!
      Мои Контакты | Мой GitHub | JoomlaZen
      *

      Latmi

      • Новичок
      • 7
      • 0 / 0
      Ни как чтобы корректно работало надо править запрос а он лежит в 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

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

      Latmi

      • Новичок
      • 7
      • 0 / 0
      Не понял: у вас вечная сессия? Если нет, то откуда возьмется список избранных в следующий заход посетителя на сайт?-Наверное, все-таки $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

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

      robert

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

      Вышло обновление Joomla! до 3.8.7

      Автор Raven23

      Ответов: 19
      Просмотров: 451
      Последний ответ Сегодня в 13:41:01
      от dmitry_stas
      Вышел релиз Joomla! 3.6.3

      Автор b2z

      Ответов: 135
      Просмотров: 11112
      Последний ответ Сегодня в 11:17:24
      от yrygvay
      Вышло обновление Joomla! до 3.8.6

      Автор Olg

      Ответов: 26
      Просмотров: 3864
      Последний ответ 18.04.2018, 19:20:46
      от zikkuratvk
      Перевод сайта на Joomla 3

      Автор qprizing

      Ответов: 1
      Просмотров: 73
      Последний ответ 15.04.2018, 23:28:46
      от effrit
      После обновления до Joomla 3.7 в админке в меню "Компоненты" пропали пункты

      Автор lolitma3

      Ответов: 35
      Просмотров: 3301
      Последний ответ 15.04.2018, 19:28:19
      от sanek2281