Поиск отдельных страниц с динамическим содержимым

У меня есть небольшая проблема, которую я пытался решить для клиента, с которым я работал. У нас есть 4 набора отдельных страниц, которые загружают контент из базы данных с использованием PHP на основе предоставленной строки получения. Эти сгенерированные страницы хорошо оптимизированы для SEO и имеют теги alt для изображений и контента, которые нам нужны, чтобы иметь возможность искать с помощью функции поиска.

Теперь я предположил (каждый знает, что вас заводит), что эти страницы по умолчанию можно будет найти с помощью встроенной функции поиска 5. Но это не работает. Если я ищу слово, которое, как я знаю, определенно находится на одной из этих страниц, даже несколько раз, результаты не будут найдены.

Как заставить Concrete5 искать эти страницы. Если это невозможно сделать по умолчанию или с помощью плагина, то может кто-нибудь дать совет, как это исправить. Это важная функция, и ее необходимо выполнить.

РЕДАКТИРОВАТЬ: см. мой комментарий ниже. Мне все еще нужна помощь или направление, так как CSE предлагает много вариантов. РЕДАКТИРОВАТЬ 2: Мне может быть целесообразно установить сканер и пользовательскую поисковую систему для решения моих проблем. Я думал о пауке. Любые другие предложения по этому или другим вариантам высоко ценятся!


person John Ayers    schedule 13.09.2013    source источник


Ответы (2)


К сожалению, C5 не предоставляет способа сделать это — единственный способ подключиться к поисковому индексу — использовать блоки. И даже если вы создали фальшивый блок только для того, чтобы передать контент с single_page в поисковый индекс, невозможно сказать, что какой-то контент взят с одного URL-адреса, а другой контент — с другого URL-адреса (что вам нужно будет сделать, поскольку ваш контроллер single_page обрабатывает множество разных URL-адресов).

Я не знаю, как добиться того, чего вы хотите (и похоже, что никто другой тоже не знает -- http://www.concrete5.org/community/forums/customizing_c5/make-content-in-single-pages-searchable/ ), кроме создания собственной внутренней поисковой системы.

РЕДАКТИРОВАТЬ: я только что немного покопался и подумал, что, возможно, вы могли бы вручную вставлять записи в таблицу PageSearchIndex и указывать там доступный для поиска контент и желаемый путь, но это не сработает, потому что он опирается на один cID (идентификатор коллекции, также известный как идентификатор страницы) для каждой записи, поэтому вы сможете вставить только одну запись для пути single_page верхнего уровня.

Я думаю, что самым простым решением здесь было бы создать собственную инфраструктуру поиска для ваших single_pages (например, какую-то функцию в контроллере, которая будет возвращать массив путей к страницам и доступный для поиска контент для каждой), затем переопределить блок поиска и выполнить дополнительный поиск вашей single_page -- затем объедините результаты на странице результатов поиска там. Или просто используйте поиск по сайту Google для вашего сайта, который фактически просканирует страницы и, следовательно, найдет ваши различные URL-адреса single_page: https://www.google.com/cse/

Удачи.

person Jordan Lev    schedule 15.09.2013
comment
Мне действительно нужна помощь в этом. Я понимаю, что здесь не так много вариантов. CSE от Google — это именно тот вариант, потому что они возвращают объявления, которые в нашем случае показывают рекламу наших конкурентов. Любые идеи о том, как я мог бы сделать свой собственный поиск внутри бетона5. В основном мне нужно искать 3 таблицы данных, чтобы искать слова внутри них, но как бы я это сделал внутри бетона5, это лабиринт. - person John Ayers; 16.09.2013
comment
Добавьте в контроллер single_page функцию, которая принимает ключевые слова для поиска и выполняет для них SQL-запрос (например, SELECT * FROM my_custom_table WHERE my_content_field LIKE '%search terms%'). Создайте правильные URL-адреса с правильными строками запросов, которые приведут кого-то на страницу, на которой есть эти результаты. Верните их в виде массива. Затем в блоке поиска переопределите файл view.php и вызовите оттуда функцию вашего контроллера. Прокрутите результаты и выведите ссылки на соответствующие страницы. Другими словами, вы игнорируете все функции, связанные с C5. - person Jordan Lev; 18.09.2013

Я не проверял это, но, возможно, вы можете поместить function getSearchableContent() в контроллер отдельных страниц, как вы это делаете для блоков. Это вернет строку для поиска. Будет выглядеть примерно так:

function getSearchableContent() {
    // ... compose searchstring depending on the queried content.
    return $searchstring;
}

Но я не знаю, работает ли это для динамического контента. Если нет, я бы изучил основные классы поискового индекса C5 и попытался расширить их для вашего проекта.

person johjoh    schedule 14.09.2013
comment
Это не работает — getSearchableContent() не вызывается на single_pages (и даже если бы это было — а это не так — нет способа указать, по какому URL-адресу находится контент). - person Jordan Lev; 15.09.2013