Re: I18N Search
у Оксаны получалось задайте ей вопрос в ЛС, может быть ответит
Форум для разработчиков сайтов на GetSimple CMS
Регистрация прекращена. Пожалуйста, зарегистрируйтесь на новом форуме.
GetSimple CMS по-русски → Бесплатные плагины → I18N Search
у Оксаны получалось задайте ей вопрос в ЛС, может быть ответит
Сделал скриншот как выглядит поиск объявлений
http://prntscr.com/3kcpn3
olexandr, вам придется эту форму с поиском объявлений написать самому (или взять где-то образец) и вставлять ручками в шаблон или на страницу, где она должна быть.
В атрибуте формы action, естессно, должна быть указана страница, на которой будут отображаться результаты поиска. Значения полей "регион" и "объявления" - это и есть теги, по которым должен быть произведен поиск. Понятно, что заранее вы не можете знать, какие теги использовать, поэтому вместо простой вставки (% searchresults tags=' ' %) на странице или get_i18n_search_results() в шаблоне надо будет создать компонент, который будет "распознавать" прилетевшие из формы значения и подставлять их в качестве тегов в результаты поиска. Приблизительно такой:
$region = (isset($_POST['region'] ) && !empty($_POST['region'] )) ? $_POST['region'] : '';
$offer = (isset($_POST['offer'] ) && !empty($_POST['offer'] )) ? ' ' . $_POST['offer'] : '';
get_i18n_search_results( array('tags'=>$region . $offer ) );
Но для этого надо бы знать хотя бы основы ПХП, потому что есть несколько нюансов, которые нужно понимать, чтобы правильно написать компонент. Готовый рецепт конкретно для вашего случая сходу написать невозможно, т.к. много неизвестных исходных параметров.
Например, каким методом будет отправлена форма? Если GET, то вместо $_POST надо везде писать $_GET
Вместо region и offer в квадратных скобках должны быть значения атрибутов name соответствующих полей формы.
Ну и понятно, если ваши страницы с объявлениями отмечены каким-то своим тегом или имеют общую родительскую страницу (а по-другому и быть не может, по-моему, иначе как их отличить от обычных страниц?), значит, надо в массив с тегами array('tags'=>$region . $offer ) добавить этот тег, чтобы поиск происходил только по объявлениям.
Как-то так:
array('tags'=>'ваш_тег '. $region . $offer )
Только аккуратно с пробелами! Между тегами обязательно должен быть один пробел. Иначе ничего не получится.
Затем вставить этот компонент туда, где должны выводиться результаты поиска.
Я не знаю, может есть и более простой способ сделать то же самое. Но лично мне он неизвестен. В моей последней работе по описанному способу отбор происходит сразу по шести разным параметрам (тегам) и все работает на ура.
Удачи!
Ну вот и пробуйте по описанному способу. Если что-то непонятно, спрашивайте.
Только просьба: указывайте все начальные условия, как то
Где находится форма? В шаблоне, на странице..
Где должны быть результаты?
Прописаны ли теги, соответствующие региону и тематике на страницах самих объявлений?
Короче, как можно больше информации. Без этого очень трудно что-то советовать, потому что ситуации у всех разные, и, как говорят серьезные дяди на серьезных форумах "телепатов здесь нет" )))
Я потому и не отвечала сразу, очень мало исходной информации даете.
Форма самая простая, мне не жалко, сейчас выложу. Айн момент...
Форма находится на странице с алиасом base, результати поиска надо чтоб были на той же странице, потому что форму потом надо будет на других страницах показывать, теги в самих обявлениях прописаны и теги регионов и теги тематики, страницы обявлений имеют несколько родительских страниц, тоисть они не в одной родительськой странице. Самое главное чтоб можно было по 2 критериям искать, тоисть выбрать в одной колонке, другой и поиск чтоб происходил
Я вырезала весь код с чекбоксами, они вам не нужны, как я понимаю.
Оставила только селекты.
Так как типы жилья - это и пункты меню тоже, я сделала их вывод с помощью get_i18n_navigation() и компонента 'nomer-zhilya', в котором эти пункты обрамляются в <option value=''></option>. Вам, возможно, это не надо, пропишите руками <option value='тег, по которому будет производиться поиск'></option>
<form method="GET" action="/rent/search" >
<div class="SRHBoxTopPositioner">Поиск жилья</div>
<div class="Bs_TitleText">Тип жилья:</div>
<select name="type" class="DropDownListText">
<option value=''>Не важно</option>
<?php get_i18n_navigation('rent', 1, 1, I18N_SHOW_NORMAL, 'nomer-zhilya'); ?>
</select>
<div class="Bs_TitleText">Цена в рублях от:</div>
<select name="minprice" class="DropDownListText">
<?php
// тут ПХП код для вывода <option> c разными значениями минимальной цены, у меня это тоже теги
// это не военная тайна, просто он вам не нужен, наверное.
// Вы можете эти самые <option> просто руками прописать
?>
</select>
<input type="submit" class = 'bluebutton' value="Найти жилье" />
</form>
Компонент у меня выглядит так (опять же вырежу все, что относится к чекбоксам, чтобы не путать)
В моем случае отличительная особенность всех страниц с жильем - это родительская страница search, поэтому я вписала в теги _parent_search , чтобы поиск производился только среди этих страниц.
<?php
$type = (isset($_GET['type']) && !empty($_GET['type'])) ? mb_strtolower($_GET['type'], 'UTF-8') : '';
$minprice = (isset($_GET['minprice']) && !empty($_GET['minprice'])) ? ' ' . $_GET['minprice'] : '';
get_i18n_search_results(
array('tags'=>'_parent_search ' . $type . $minprice, 'numWords'=>0,'HEADER'=>null,
'order'=>'+priceot','NOT_FOUND'=>'Ничего не найдено', 'showPaging'=>null )
);
?>
А где компонент подключается ?
Ага, компонент 'nomer-zhilya'
Мне тогда надо убрать, _parent_search чтоб небыло по родительской странице ?
И через меню мне тоже наверное не надо выводить ? У меня там страницы те не выводятся, мне только по тегах
А где компонент подключается ?
Затем вставить этот компонент туда, где должны выводиться результаты поиска.
Мне тогда надо убрать, _parent_search чтоб небыло по родительской странице ?
... если ваши страницы с объявлениями отмечены каким-то своим тегом или имеют общую родительскую страницу значит, надо в массив с тегами array('tags'=>$region . $offer ) добавить этот тег, чтобы поиск происходил только по объявлениям.
Как-то так:array('tags'=>'ваш_тег '. $region . $offer )
Ну конечно убрать, если не надо. Вы постарайтесь внимательнее читать ответы. Мне, знаете ли, здесь никто не платит, чтобы я отвечала , да еще собственные сообщения по нескольку раз цитировала. Не обижайтесь. Но правда, желание помогать совсем не прибавляется, когда видишь, что твои сообщения невнимательно читаются.
<form method="GET" action="/base" >
<div class="SRHBoxTopPositioner">Поиск жилья</div>
<div class="Bs_TitleText">Регион:</div>
<select name="type" class="DropDownListText">
<option value='регион1, регион2'></option>
</select>
<div class="Bs_TitleText">Продажа или аренда:</div>
<select name="minprice" class="DropDownListText">
<?php
<option value='продажа, аренда'></option>
?>
</select>
<input type="submit" class = 'bluebutton' value="Найти жилье" />
</form>
<option value='регион1, регион2'></option>
Ну вы чего, в самом деле?
Как option в select вставляется? Это ж HTML, первый класс вторая четверть...
<option value='регион1'>регион1</option>
<option value='регион2'>регион2</option>
<option value='регион3'>регион3</option>
И во втором селекте то же самое, только теги PHP уберите, зачем они там?
И насчет value русскими буквами не могу поручиться, что все будет работать как надо, у меня все латиницей.
Все теги в объявлениях прописаны на русском
<form method="GET" action="/base" >
<div class="SRHBoxTopPositioner">Поиск жилья</div>
<div class="Bs_TitleText">Регион:</div>
<select name="type" class="DropDownListText">
<option value='регион1'>регион1</option>
<option value='регион2'>регион2</option>
<option value='регион3'>регион3</option>
</select>
<div class="Bs_TitleText">Продажа или аренда:</div>
<select name="minprice" class="DropDownListText">
<option value='Продажа'>Продажа</option>
<option value='Аренда'>Аренда</option>
</select>
<input type="submit" class = 'bluebutton' value="Найти жилье" />
</form>
Я создал компонент nomer-zhilya
<?php
$type = (isset($_GET['type']) && !empty($_GET['type'])) ? mb_strtolower($_GET['type'], 'UTF-8') : '';
$minprice = (isset($_GET['minprice']) && !empty($_GET['minprice'])) ? ' ' . $_GET['minprice'] : '';
get_i18n_search_results(
array('tags'=> . $type . $minprice, 'numWords'=>0,'HEADER'=>null,
'order'=>'+priceot','NOT_FOUND'=>'Ничего не найдено', 'showPaging'=>null )
);
?>
Виновата, обманула вас нечаянно. У меня тоже все value на русском. Все работает.
Только имейте ввиду, что все теги сохраняются маленькими буквами. То есть, по значению "Продажа" вы ничего не найдете. Надо либо в value писать 'продажа', либо в компоненте использовать функцию mb_strtolower(), чтобы все привелось к нижнему регистру. В моем компоненте она используется только для типа жилья. Для цены это не нужно, потому что это цифры.
Функция mb_strtolower() есть в вашем компоненте, я точно такой вставил, тогда должно работать. Оксана, а сейчас форма и компонент я хорошо написал? Пока что выводит ошыбку Object not found!
<form method="GET" action="/base" >
<div class="SRHBoxTopPositioner">Поиск жилья</div>
<div class="Bs_TitleText">Регион:</div>
<select name="type" class="DropDownListText">
<option value='регион1'>регион1</option>
<option value='регион2'>регион2</option>
<option value='регион3'>регион3</option>
</select>
<div class="Bs_TitleText">Продажа или аренда:</div>
<select name="minprice" class="DropDownListText">
<option value='Продажа'>Продажа</option>
<option value='Аренда'>Аренда</option>
</select>
<input type="submit" class = 'bluebutton' value="Найти жилье" />
</form>
Компонент nomer-zhilya
<?php
$type = (isset($_GET['type']) && !empty($_GET['type'])) ? mb_strtolower($_GET['type'], 'UTF-8') : '';
$minprice = (isset($_GET['minprice']) && !empty($_GET['minprice'])) ? ' ' . $_GET['minprice'] : '';
get_i18n_search_results(
array('tags'=> . $type . $minprice, 'numWords'=>0,'HEADER'=>null,
'order'=>'+priceot','NOT_FOUND'=>'Ничего не найдено', 'showPaging'=>null )
);
?>
Я создал компонент nomer-zhilya
Я очень рада за вас.
Но по-моему вы просто скопировали мой код....
Ни имена полей не изменили (type, minprice), и в форме тоже, кстати. Зачем вам мои-то? Мне, конечно, не жалко, используйте ради бога, но вам-то больше по смыслу подходит что-то типа region и offer (или как там объявление по английски?)
Ни _parent_search не убрали, ни мои настройки для поиска не заменили ('order'=>'+priceot' это-то вам зачем? У меня это поле в специальных страницах с минимальной ценой, чтобы результаты выводились по цене по возрастанию, у вас такого поля по-любому нет, и остальные настройки вам надо ваши писать, а не тупо мои копировать)
Да и название самого компонента зачем вам "номер жилья"??? Назовите как-нибудь по-своему, просто "search" например, сами же потом запутаетесь.
Функция mb_strtolower() есть в вашем компоненте
Я же написала, что у меня она используется только для типа жилья, потому что для цены она не нужна.
Вам ее нужно использовать для обоих селектов, ведь и там, и там могут быть большие буквы!
$type = (isset($_GET['type']) && !empty($_GET['type'])) ? mb_strtolower($_GET['type'], 'UTF-8') : '';
$minprice = (isset($_GET['minprice']) && !empty($_GET['minprice'])) ? ' ' . mb_strtolower($_GET['minprice'] , 'UTF-8') : '';
В общем, дорогой olexandr, прошу еще раз не обижаться, но полностью писать за вас ваш код я тоже не могу.
У меня висит очень серьезная проблема с сайтом, и вместо того, чтобы ее решать, я сижу и 3 часа переписываюсь с вами.
В подсказках, которые я вам дала, достаточно информации, чтобы слепить такой же поиск.
Изучайте документацию самого плагина i18n_search, учите пхп (он не такой страшный, как кажется, у меня на освоение ушло около 2х месяцев, но это по "полной программе", для основ намного меньше времени нужно).
И включайте голову. Если неохота и некогда, тогда остается только вариант за деньги.
Извините еще раз, но реально не могу себе позволить тратить столько времени, когда своих проблем полно.
Я оставил это таким как у вас все потому чтоб ошыбок ненаделать лишних, не потому что не хотел писать, может ошыбся, надо было все новое написать, названия.
Спасибо большое Оксана, да вы действительно подробно все описали и очень помогли мне, надеюсь я доделаю форму и она будет работать
На страницах есть галерея от i18n gallary, плагин i18n search в полном выводе не подгружает ее, может в компоненте надо чтото прописать?
если вы используете плагин I18N Special Pages, то попробуйте на вкладке ОТОБРАЖЕНИЕ использовать такой код
<?php get_i18n_gallery_header('my-gallery-name'); ?>
<?php get_i18n_gallery('my-gallery-name'); ?>
если же вы используете код плагина непосредственно на страницах, то в полной новости все должно работать
если же вы имеете ввиду отрывки новостей, то при использовании плагина I18N Special Pages есть возможность указать вышеуказанный код на вкладке ПОИСК, но используемый на страницах код галерею не покажет
Использую только I18N Custom Fields, а I18N Special Pages нет, я вывожу на странице через i18n search материал, материал я настроил чтоб целый выводился, но галереи которые есть на тех страницах, не выводятся, не показываются
Код компонента:
<h3 class="search-entry-title">
<a href="<?php echo $item->link; ?>">
<?php echo htmlspecialchars($item->title, ENT_NOQUOTES); ?>
</a>
</h3>
<?php if ($showDate) { ?>
<?php } ?>
<div class="search-entry-excerpt">
<?php echo $item->getExcerpt($item->content, $numWords); ?>
</div>
попробуйте так
<h3 class="search-entry-title">
<a href="<?php echo $item->link; ?>">
<?php echo htmlspecialchars($item->title, ENT_NOQUOTES); ?>
</a>
</h3>
<?php if ($showDate) { ?>
<?php } ?>
<div class="search-entry-excerpt">
<?php get_page_content(); ?>
</div>
Можно создать плагином I18n Special Pages выведеные теги чтоб фильтровать содержымое по тегам ? В моем случае надо по 2 тегам. Я думаю как можно заменить форму фильтра материалов етим плагином
(% searchresults tags:_блог lang:ru order:created HEADER="" %)
Как в таком коде вказывать несколько тегов, и сколько можно вказать тегов, 4-10 можно ?
GetSimple CMS по-русски → Бесплатные плагины → I18N Search
Форум работает на PunBB, при поддержке Informer Technologies, Inc