Поиск страниц по параметрам

Обсуждение модулей, устанавливаемых по-умолчанию в cms concrete5

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 21 ноя 2012, 23:34 ,  »  Сообщение:#16

iDom писал(а):Чёрт возьми тогда какого ежа ничего не работает....

И да я ещё сума не сошёл, база в UTF-8
Принудительное кодирование страницы тоже UTF-8...


1. Для отладки можно сделать (временно прямо в ядре в классе PageList или где вы там работаете) не помню в какой функции, надо посмотреть где конечный запрос к БД:
либо Log::addEntry('Текст Сообщения', 'my_type_message');
либо прямо echo "Текст Сообщения";
и выводить вместо "Текст Сообщения" текущий запрос к БД.
В первом случае, если в настройках включено логгирование, то все эти сообщения будут записываться в Журнал в панели управления. my_type_message - тут любой бред - потом в журнале по этому типу можно будет отсортировать чисто свои сообщения. Этот параметр можно опустить.
Во втором случае понятно - вывод в браузер.
Проанализировав запрос (будет большой и с JOINами) можно посмотреть что не так и поэкспериментировать например в PhpMyAdmin с этим запросом в SQL-консоли.

Вообще, очень странно, но я такую задачу уже делал.
Сортировал так объекты недвижимости (своя модель наследованная от DatabaseItemList).
Сортировал так туристические маршруты (своя модель наследованная от DatabaseItemList).
Сортировал так страницы.

Очень занят сейчас, так бы взялся вплотную помогать вам.

2. Сейчас (да уже давно) весь мир переходит на юникод. ОС работают в юникоде. Все популярные фреймворки тоже в юникоде уже давно стараются работать.
Что не так? Я как раз очень рад, что все в UTF-8 - меньше проблем с кодировками.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 21 ноя 2012, 23:57 ,  »  Сообщение:#17

iDom писал(а):Можно ещё справку что вот этот участок кода делает?
На сколько я понял именно он и реализует поиск по параметрам по умолчанию... но как-то не работал он изначально...


Код: Выделить всё
      $aksearch = false;
      if (is_array($_REQUEST['akID'])) { // Если в запросе (POST/GET) есть akID и это массив, то выполняем код дальше, если это не массив, то этот код ничего не делает
         Loader::model('attribute/categories/collection'); // подгружаем модель атрибута страницы, чтобы с ней работать
         foreach($_REQUEST['akID'] as $akID => $req) { // проходим по каждому элементу массива и ключ в $akID, а значение в $req
            $fak = CollectionAttributeKey::getByID($akID); // берем атрибут по его ID
            if (is_object($fak)) { // проверяем, существует ли такой атрибут, или это ошибка
               $type = $fak->getAttributeType(); // берем тип атрибута (текст, boolean и т.д.)
               $cnt = $type->getController(); // берем контроллер этого типа атрибута
               $cnt->setAttributeKey($fak); // даем контроллеру наш атрибут, чтобы он именно с ним работал
               $cnt->searchForm($ipl); // осуществляем отбор в листе $ipl по нашему атрибуту при помощи все того же filterByAttribute($handle, $value, $comparison)
               $aksearch = true;
            }
         }
      }


Прошу заметить, что searchForm у каждого типа атрибута свой, посмотрите в /concrete/models/attribute/types
или в современных версиях /concrete/core/models/attribute/types

Например, если фильтруете по числовому типу атрибута (number) то если в запросе не указаны хотя бы from или хотя бы to (можно оба указать), то фильтр не сработает.
А для текстового атрибута нужно в запросе передавать value. И никак иначе, иначе тоже фильтр не сработает.

Вы спросите - а почему так?
А потому, что элементы формы для поиска и для ввода атрибутов генерируются контроллером типа атрибута, а именно методом form() в контроллере типа.

Поэтому я этими стандартными методами не пользуюсь. Я делаю свою форму (или она может отсутствовать и значения программно прописываются) и потом обращаюсь напрямую к $list->filterByAttribute.

Короче, можете посмотреть в тех папках, которые я описал выше в контроллерах методы form, getValue, searchForm.

Еще раз повторюсь - метод searchForm создан для работы в связке с методом form, который делает форму ввода для атрибута.
Не думаю, что вам нужно идти этим путем. А код, о котором вы сказали также будет работать только в случае, если данные были переданы через POST/GET запрос при помощи сгенерированной формы.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 00:20 ,  »  Сообщение:#18

Да, забыл сказать, я кажется догадался, почему у вас не работает:

Если вы хотите искать по всем страницам на сайте по атрибутам, то используйте PageList, а не IndexedPageList.
Дело в том, что IndexedPageList будет искать только по страницам, которые находятся в индексе поисковой системы, если страницы в индексе нет - ничего не будет найдено. А чтобы добавлять страницы в индекс нужно периодически выполнять задачу индексации сайта.

А вот PageList вам найдет среди всех существующих страниц.

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

Так как система работает в UTF-8, то разницы на каком языке вы пишете - на китайском или на русском - нет никакой.
Единственно - если вы что-то делаете при помощи блока Search - в контроллере блока Search происходит обработка регулярным выражением - в нем нет русских символов, только латинские. Но если вы реализуете фильтрацию по атрибутам, то нафиг вам вообще блок Search.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение cmsservice » 22 ноя 2012, 09:57 ,  »  Сообщение:#19

Count_Raven писал(а):Единственно - если вы что-то делаете при помощи блока Search - в контроллере блока Search происходит обработка регулярным выражением - в нем нет русских символов, только латинские. Но если вы реализуете фильтрацию по атрибутам, то нафиг вам вообще блок Search.

Не не, там он полностью переписан начиная с версии 5.6 и соответственно никакими регулярками там уже и не пахнет.
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 13:59 ,  »  Сообщение:#20

cmsservice писал(а):
Count_Raven писал(а):Единственно - если вы что-то делаете при помощи блока Search - в контроллере блока Search происходит обработка регулярным выражением - в нем нет русских символов, только латинские. Но если вы реализуете фильтрацию по атрибутам, то нафиг вам вообще блок Search.

Не не, там он полностью переписан начиная с версии 5.6 и соответственно никакими регулярками там уже и не пахнет.

А, спасибо, не знал. Надо тогда мне тоже посмотреть/переделать, а то я свой собственный блок еще с 5.4 использую, хотя работаю на 5.6 =)
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение iDom » 22 ноя 2012, 15:45 ,  »  Сообщение:#21

cmsservice писал(а):
Count_Raven писал(а):Единственно - если вы что-то делаете при помощи блока Search - в контроллере блока Search происходит обработка регулярным выражением - в нем нет русских символов, только латинские. Но если вы реализуете фильтрацию по атрибутам, то нафиг вам вообще блок Search.

Не не, там он полностью переписан начиная с версии 5.6 и соответственно никакими регулярками там уже и не пахнет.

Я вам про Фому, вы мне про Ерёму)) Я в первом посте упомянал, что использую версию 5.5.2.1 при чём тут 5.6
iDom
 
Сообщения: 31
Зарегистрирован: 18 ноя 2012, 11:12

Re: Поиск страниц по параметрам

Сообщение iDom » 22 ноя 2012, 15:48 ,  »  Сообщение:#22

Count_Raven писал(а):Да, забыл сказать, я кажется догадался, почему у вас не работает:
Если вы хотите искать по всем страницам на сайте по атрибутам, то используйте PageList, а не IndexedPageList.
Дело в том, что IndexedPageList будет искать только по страницам, которые находятся в индексе поисковой системы, если страницы в индексе нет - ничего не будет найдено. А чтобы добавлять страницы в индекс нужно периодически выполнять задачу индексации сайта.

Я вкурсе этой детали и выполняю переиндексацию после добавления очередной порции страниц.
iDom
 
Сообщения: 31
Зарегистрирован: 18 ноя 2012, 11:12

Re: Поиск страниц по параметрам

Сообщение iDom » 22 ноя 2012, 16:18 ,  »  Сообщение:#23

Если не составит труда сбросьте ваш модуль поиска?
iDom
 
Сообщения: 31
Зарегистрирован: 18 ноя 2012, 11:12

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 22:02 ,  »  Сообщение:#24

iDom писал(а):
Count_Raven писал(а):Да, забыл сказать, я кажется догадался, почему у вас не работает:
Если вы хотите искать по всем страницам на сайте по атрибутам, то используйте PageList, а не IndexedPageList.
Дело в том, что IndexedPageList будет искать только по страницам, которые находятся в индексе поисковой системы, если страницы в индексе нет - ничего не будет найдено. А чтобы добавлять страницы в индекс нужно периодически выполнять задачу индексации сайта.

Я вкурсе этой детали и выполняю переиндексацию после добавления очередной порции страниц.

А я вам ерему предложил. Попробуйте.
А баги, если нашли, так в официал отправляйте. Ну хоть мне отчет... Не ясно же...
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 22:07 ,  »  Сообщение:#25

iDom писал(а):Если не составит труда сбросьте ваш модуль поиска?

Сброшу, только написано !DEPRECATED.
У меня старый от 5.4 с русскими символами.

Вам не это нужно по сути. Вы не там ищите, как мне кажется.
Если у вас индекс, то делайте reindex принудительно для определенного объекта. Иначе его не будет там. Или я не знаю.
Мне кажется, что я решу вашу проблему, но только я не понимаю, что именно вы делаете...
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 22:38 ,  »  Сообщение:#26

iDom писал(а):Если не составит труда сбросьте ваш модуль поиска?

Поиска чего?
Взятый стандартный от 5.4 и с переделанным выражением?
Только же сказали, что он уже в 5.6 не в тему.

Или может выложить объекты от недвижимости и туров? Зачем последнее? Я же сказал, они работают на DatabaseItemList. Прошу заметить - в этом файле еще есть классы для ячеек таблицы и методы для сортировки (посмотрите, они еще для JavaScript для сортировки вывода черех AJAX на стороне пользователя). Они в конце. Исходный код моих объектов я не могу выложить, они принадлежат СтройИнвест и Saver. Любые другие мои свободно на Concrete5.org и на GIThub. Сча дам ссылку на учебник в виде исходного пакета для 5.3 - учите, сортируйте, исследуйте (для 5.5+ нужно новый CSS знать для Twitter Bootstrap и классы с методами изменились, но понять все можно):

Боян для работы с коллекциями объектов и для ORM с Concrete5 (старое).
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку


В этом коде найдете основные принципы создания новых пакетов, блоков, атрибутов, разных объектов. Научитесь работать с ними, сортировать их, присоединять атрибуты любым объектам, отбирать их по ним, использовать кэширование для объектов и т.д. (В этом пакете не получится правильно работать с кэшем, он старый).
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение iDom » 22 ноя 2012, 22:44 ,  »  Сообщение:#27

меня этот поиск уже убивает.
Ещё раз в кратце.
Ситуация проста как 2 копейки, но почему-то не разрешима стандартными методами.
Есть поиск по сайту, есть на той же странице просто подбор по параметрам.
Проблема состоит в том что filterByKeywords работает - тоесть работает обычный строковый поиск. filterByCollectionTypeID работает - тоесть я могу выводить например только страницы продуктов, а страницы брендов и прочие побочные не выводить. Но вот filterByAttribute не работает ни в какой из своих возможных вариаций, просто ни в какую. Вопрос прост почему. Я реально не понимаю, строковый поиск работает, а фильтр по аттрибутам нет.
Последний раз редактировалось iDom 22 ноя 2012, 22:47, всего редактировалось 1 раз.
iDom
 
Сообщения: 31
Зарегистрирован: 18 ноя 2012, 11:12

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 22:45 ,  »  Сообщение:#28

iDom писал(а):Если не составит труда сбросьте ваш модуль поиска?

Сча найду, он особо от старого ничем не отличается, только регулярными выражениями.
Вроде же сказали уже не нужен =)
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Поиск страниц по параметрам

Сообщение iDom » 22 ноя 2012, 22:51 ,  »  Сообщение:#29

Просто документация на оф.сайте написана так что там надо быть ясновидящим чтобы понять что именно нужно в функцию передать.... Я же просто собираю данные с формы в массив и для каждого элемента проверяю аттрибут. Может ли быть такое что искомые атрибуты не индексируются, и что это вообще за звезданутая идея внутренней индексации страниц? Для того что-бы что-то скрыть от пользователей, достаточно настроить права доступа. ЦМС эта вообще не лишена элемента тотального издевательства над разрабами...
iDom
 
Сообщения: 31
Зарегистрирован: 18 ноя 2012, 11:12

Re: Поиск страниц по параметрам

Сообщение Count_Raven » 22 ноя 2012, 23:30 ,  »  Сообщение:#30

Файл
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Пред.След.

Вернуться в Стандартные модули concrete5

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron