Страница 2 из 4

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

СообщениеДобавлено: 21 ноя 2012, 23:34
Count_Raven
iDom писал(а):Чёрт возьми тогда какого ежа ничего не работает....

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


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

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

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

2. Сейчас (да уже давно) весь мир переходит на юникод. ОС работают в юникоде. Все популярные фреймворки тоже в юникоде уже давно стараются работать.
Что не так? Я как раз очень рад, что все в UTF-8 - меньше проблем с кодировками.

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

СообщениеДобавлено: 21 ноя 2012, 23:57
Count_Raven
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 запрос при помощи сгенерированной формы.

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

СообщениеДобавлено: 22 ноя 2012, 00:20
Count_Raven
Да, забыл сказать, я кажется догадался, почему у вас не работает:

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

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

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

Так как система работает в UTF-8, то разницы на каком языке вы пишете - на китайском или на русском - нет никакой.
Единственно - если вы что-то делаете при помощи блока Search - в контроллере блока Search происходит обработка регулярным выражением - в нем нет русских символов, только латинские. Но если вы реализуете фильтрацию по атрибутам, то нафиг вам вообще блок Search.

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

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

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

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

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

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

А, спасибо, не знал. Надо тогда мне тоже посмотреть/переделать, а то я свой собственный блок еще с 5.4 использую, хотя работаю на 5.6 =)

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

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

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

Я вам про Фому, вы мне про Ерёму)) Я в первом посте упомянал, что использую версию 5.5.2.1 при чём тут 5.6

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

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

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

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

СообщениеДобавлено: 22 ноя 2012, 16:18
iDom
Если не составит труда сбросьте ваш модуль поиска?

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

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

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

А я вам ерему предложил. Попробуйте.
А баги, если нашли, так в официал отправляйте. Ну хоть мне отчет... Не ясно же...

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

СообщениеДобавлено: 22 ноя 2012, 22:07
Count_Raven
iDom писал(а):Если не составит труда сбросьте ваш модуль поиска?

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

Вам не это нужно по сути. Вы не там ищите, как мне кажется.
Если у вас индекс, то делайте reindex принудительно для определенного объекта. Иначе его не будет там. Или я не знаю.
Мне кажется, что я решу вашу проблему, но только я не понимаю, что именно вы делаете...

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

СообщениеДобавлено: 22 ноя 2012, 22:38
Count_Raven
iDom писал(а):Если не составит труда сбросьте ваш модуль поиска?

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

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

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


В этом коде найдете основные принципы создания новых пакетов, блоков, атрибутов, разных объектов. Научитесь работать с ними, сортировать их, присоединять атрибуты любым объектам, отбирать их по ним, использовать кэширование для объектов и т.д. (В этом пакете не получится правильно работать с кэшем, он старый).

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

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

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

СообщениеДобавлено: 22 ноя 2012, 22:45
Count_Raven
iDom писал(а):Если не составит труда сбросьте ваш модуль поиска?

Сча найду, он особо от старого ничем не отличается, только регулярными выражениями.
Вроде же сказали уже не нужен =)

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

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

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

СообщениеДобавлено: 22 ноя 2012, 23:30
Count_Raven
Файл