Новости Joomla

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

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Вех с Новым Годом. ! :)

Пока писал свой модуль  по фильтру товаров, Решил проблемку со сбросом фильтров при переходе в Другую категорию! :)
Фильтр сбрасывается если Вы переходите в другую категорию, но сохраняется если Вы зашли в товар и потом вернулись в ету категррию

файл:  \components\com_jshopping\lib\functions.php

перед функцией getBuildFilterListProduct()   вставляем мою функцию:

Спойлер
[свернуть]


Теперь в функции  getBuildFilterListProduct($contextfilter, $no_filter = array()){
1) В самом начале определяем корень массива:
     $path = 'ActiveFiltr';
2) Заменяем всё что было связано с getUserStateFromRequest и  filterAllowValue  на новую функцию
    Пример:
       Ето:
    $manufacturers = $mainframe->getUserStateFromRequest( $contextfilter.'manufacturers', 'manufacturers', array());
    $manufacturers = filterAllowValue($manufacturers, "int+");
       Меняем на ето!
    $manufacturers = GetRequestSession($path, 'manufacturers');

3) Если Вы используете стандартный модуль фильтров, ДЕЛАЕМ точно такие же замены !
        Плюс если модуль отправляет данные POST запросом, После всех вызовов етой функции прописываем:
Код: php
if (isset($_POST['redirect'])){
header('Location:'.'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
}
       В файле шаблона В ФОРМУ добавляем инпут:
<input type="hidden" name="redirect" value="1">
 
И  Вас перестанет мучать "ПОВТОРНАЯ ОТПРАВКА ФОРМЫ"

« Последнее редактирование: 19.01.2016, 18:46:35 от avantyrist »
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
В топике чуток изменил функцию для цен
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
У меня ваше решение работает, но чекбоксы остаются отмечены, хотя после перехода выводятся все товары категории.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
avantyrist, я немного исправил и упростил вашу функцию
Спойлер
[свернуть]
Не тестировал, правда. Но это грубые костыли, вам нужно было написать плагин на событие afterGetBuildFilterListProduct, тогда ничего править не пришлось бы.
чекбоксы остаются отмечены, хотя после перехода выводятся все товары категории.
После перехода откуда куда? Подозреваю, что ваш фильтр работает на AJAX.
« Последнее редактирование: 12.01.2016, 15:48:44 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
После перехода откуда куда? Подозреваю, что ваш фильтр работает на AJAX.
После перехода на другую категорию фильтр сбрасывается и выводятся все товары, как и задумано. Но чекбоксы чекнутые.
Вы верно подозреваете, в фильтре применяется AJAX.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
После перехода на другую категорию фильтр сбрасывается и выводятся все товары, как и задумано. Но чекбоксы чекнутые.
Вы верно подозреваете, в фильтре применяется AJAX.
Так и думал. Нужно дописать скрипт, чтобы и фильтр обновил.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Так и думал. Нужно дописать скрипт, чтобы и фильтр обновил.
Плохо(
Как я понимаю, для сброса фильтра, дописывать нужно на javascript?
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Смотря как Фильтр принимает данные.
Смотрите в модуле есть ли функции getUserStateFromRequest
Если есть попробуйте поменять их на мою....

robert я "учуся - мучаюся" !  :) а вам спасибо
К етим костылям сессии я пришёл, во время написания модуля фильтра товаров (который, наполовину, работает с помощью сесий, чтобы меньше делать запросов в БД)
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Блин я только сейчас заметил что идёт не соместимость с
    header('Location:'.'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);

Принцип:
1) Форму отпраляю POST запросом, в форме есть пустышка: <input type="hidden" name="session_id" value="1">
2) В основном файле модуля обрабатыаю POST запросы, своей функцией, да даже не соей а просто записываю в сессию.
3) В Конце делаю проверку и переадресацию:

Код
<?php
if (isset($_POST['session_id'])){
header('Location:'.'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
} ?>


Так оно ничего не записывает в сессию :(,  Какая логика должна быть при таких манипуляциях :(  я не могу понять никак
Стандартная функция getUserStateFromRequest делает запись в Сессию

--------------------------------------
P/S   А нет всё таки глюк в функции, по ночам надо спать и пиво не пить когда чтото ковыряю :)
        НАДО переписать весь бред  ;D
--------------------------------------
Vitos я сомневаюсь что JavaScript
сделайте:
echo'<pre>'; print_r($_SESSION); echo'</pre>';
И изучите содержимое етого масиива
« Последнее редактирование: 19.01.2016, 02:46:32 от avantyrist »
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Исправил функцию в топике, дополнил описание


robert
Хоть убейте не пойму Ваш Вариант :)
Как оно будет определять из той ли я категории сделал запросы. Запустить не получилось, ошибки с preg_match лезут,  наверное из-за етого :
$val=$jinput->get($key,array(),'ARRAY');

Цены приходят не массивом... И откуда етот метод берёт концы я не понял :))
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Я только модифицировал вашу функцию, но видимо, ваша функция не работает, поэтому и моя не работает.
Так вот, если дело касается только сброса всех значений в mod_jshopping_filter, то нет смысла делать такой костыль. Переопреледите tmpl/default.php и сразу после закрывающего тэга </script> добавьте
Спойлер
[свернуть]
Не будь паразитом, сделай что-нибудь самостоятельно!
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
robert
 Последняя моя правка работает.  Ну, у меня по крайней мере не получилось заставить её не работать :) Мне бы понять что там не работает :)
весь Сурбор как раз заключался в том чтобы сбрасывался результат фильтра(Категории товаров, произодители.....) и сбрасыался модуль фильтров.

Обьясню:
1) захожу в категорию, начинаю в ней делать фильтрацию товаров, с помощью модуля.
2) из отфильтрованного списка захожу в товар.
3) из товара возвращаюсь обратно в туже категорию, РЕЗУЛЬТАТЫ ФИЛЬТРАЦИИ НЕ СБРОСИЛИСЬ
4) Тут мне захотелось перейти в другую категорию.
5) а потом взял и вернулся в первую категорию, РЕЗУЛЬТАТ ФИЛЬТРАЦИИ ОБНУЛЕНЫ.

также работает перенаправление:
header('Location:'.'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);

*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Последняя моя правка работает.
Возможно, я не проверял.
Но хак, тем более хак ядра - это моветон. Напишите плагин с тем же кодом на событие afterGetBuildFilterListProduct или тестируйте мое последнее предложение.

P.S. Давайте я немного объясню. Обычно задача заключается в обратном: чтобы параметры фильтра не обнулялись, а вам же нужно их сбросить. Тогда будет лишним их сохранить: они и так уже сохранены в State. Вам нужно только сохранить ID категории (производителя) для сравнения.
И раз вы пишете под Joomla, то пора использовать ее API.
« Последнее редактирование: 20.01.2016, 00:19:36 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Я ешё не знаю как в плагины оборачивать. API ето класно наверное :) но на данный момент разобрать что откуда берётся в етой Joomla для взрыв мозга.

robert если я не ошибаюсь Вы один из разработчиков JoomShoping ?  Можете пожалуйста сказать, с точки зрения производительности, в данной ситуации плагин ето правильное решение ? В том плане что плагин как я понимаю ето дополнительные ресурсы: Вызов етого плагина, поиск нужной точки входа, замена чегото на чтото.  
Хак ето понятно не гуд, Обноивился, забыл, всё слетело.... Я допустим "блокнот" веду что к чему :)
-------------------------------
Я не в одном магазине не видел чтобы сохранялись параметры фильтрации при переходах по разным категориям. Меня чуток в ступор поставило то что в исходном варианте получается :(,  Сначала подумал что я гдето чтото напортачил (ето было очень давно :) )
« Последнее редактирование: 20.01.2016, 00:23:39 от avantyrist »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Нет, я не разработчик JoomShopping, я всего лишь кодер-самоучка. Плагин - это врезка кода, это как будьто вы написали код, потом что-то вспомните и добавите еще кусок. Да, ресурсы нужны, но только для определения точки, куда нужно вставить этот кусок кода.
« Последнее редактирование: 20.01.2016, 00:38:48 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
robert, подскажите пожалуйста чайнику, чтобы впихнуть это все в плагин, на событие afterGetBuildFilterListProduct нужно писать всю измененную функцию getBuildFilterListProduct ? Хочется понять...
Ведь грубо говоря в файле functions.php, мы сейчас имеем одну новую функцию и одно измененную.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Если ваша цель - сбросить все параметры фильтра при перехода из категории в категорию, при этом сохранить их при переходе из товара в категорию, то возьмите решение, которое я привел 6 постов выше.
Решение от avantyrist не слишком рационалное: он пытается сохранить то, что и так уже сохранено. Если вы все же хотите написать плагин, то в нем должна быть функция afterGetBuildFilterListProduct(&$filters). Подробно о том, как создавать плагин, читайте здесь.
« Последнее редактирование: 25.01.2016, 02:33:08 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Спасибо, ваше решение проверю и отпишусь. Интерес у меня фифти-фифти. С одной стороны раздражает такая работа фильтра а с другой, хочу разобраться в создании плагинов, ведь полезных хаков для магазина много.
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
robert Спасибо за участие

VITOS если получится выложите пожалуйста плагин.
У меня времени не хватает на разбор API Joomla. Щас Ковыряюсь в основами PHP, Javascript и jQuery.

Решение которое я выкладывал было связано с тем что я сразу не понял как получать доступ к исходной сесии(удалять от туда). Ету функцию нарисовал в ходе написания модуля фильтров
Но как по мне в итоге получается м.б. и лучше, так дёргается только моя функция + JRequest, а не тянется за собой куча функций из API.

P\S:  Я скорее всего не прав!! :)
« Последнее редактирование: 24.01.2016, 00:15:01 от avantyrist »
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
robert, проверил ваше решение (переопределил tmpl/default.php и дописал ваш код), результат удивил.
Все в точности до наоборот, чекбоксы все снимаются при переходах, но товары так и остаются отфильтроваными. :)
Я конечно не исключаю, что это проблема моего ajax-недофильтра, я еще позже проверю на стандартном.
avantyrist, для вас собрал "протоплагин" для экспериментов ;)
Правильно собрал или нет, я и сам не знаю)) может гуру robert подскажет, но работает он у меня точно также как и ваш хак. В принципе верно, только чекбоксы не сбрасываются, на стандартном еще не проверял.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Раз работает, значит правильно :). Все-таки набросал свой вариант и выложил тут. Протестируйте и отпишитесь.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Отписался в вашей теме))
*

olf

  • Захожу иногда
  • 360
  • 5 / 1
А вот фото - без фото не сбрасывает. Я про этот плагин.

P.S. Я понял. Оказывается я тестировал расширенный фильтр, - а там автономный запрос фильтрации по фото к базе. Значит надо допиливать прямо в нем по принципу как в плагине от robertа.
« Последнее редактирование: 24.03.2016, 16:11:59 от olf »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Адрес e-mail как логин при регистрации

Автор orexov_m

Ответов: 51
Просмотров: 12957
Последний ответ 28.02.2024, 18:34:01
от nevigen
[Решено] - Заказ на одной странице

Автор shurakana

Ответов: 58
Просмотров: 16492
Последний ответ 16.03.2023, 09:53:16
от kit2m2
[Решено] Товар на замену в блоке с ценой

Автор dron

Ответов: 2
Просмотров: 1258
Последний ответ 13.04.2022, 16:09:53
от dron
[Решено] Разные шаблоны для разных статусов заказов

Автор nevigen

Ответов: 4
Просмотров: 3420
Последний ответ 04.04.2022, 19:45:58
от nevigen
(РЕШЕНО) Как в модуле фильтров вывести логотипы производителей?

Автор denxio

Ответов: 9
Просмотров: 2490
Последний ответ 24.05.2020, 19:22:12
от vitalicc