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

Latmi

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

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

Septdir

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

Latmi

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

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

robert

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

Septdir

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

    Septdir

    • Живу я здесь
    • 2738
    • 133 / 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

      • Живу я здесь
      • 4313
      • 409 / 15
      Мне время сессии хватит.
      Не понял: у вас вечная сессия? Если нет, то откуда возьмется список избранных в следующий заход посетителя на сайт?
      я все таки сделал вывод в плагине:
      Скорее всего я сделал очень криво и неправильно. Прокомментируйте пожалуйста.
      -Наверное, все-таки $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

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

      Проблема Joomla с большим количеством материала (статей)

      Автор ruslan13

      Ответов: 7
      Просмотров: 291
      Последний ответ 21.01.2018, 11:16:41
      от ruslan13
      Не устанавливается Joomla 3

      Автор olikCZ

      Ответов: 4
      Просмотров: 110
      Последний ответ 16.01.2018, 17:58:09
      от olikCZ
      Установить виджет на Joomla 3.8

      Автор Civik35

      Ответов: 4
      Просмотров: 151
      Последний ответ 16.01.2018, 07:53:43
      от Arkadiy
      Нумерация элементов в админке Joomla

      Автор romagromov

      Ответов: 0
      Просмотров: 41
      Последний ответ 15.01.2018, 14:29:50
      от romagromov
      Эффективность core Joomla

      Автор ruslan13

      Ответов: 69
      Просмотров: 962
      Последний ответ 12.01.2018, 16:20:55
      от ruslan13