Регистрация
Вход через соцсети
Восстановление пароля

Создание поиска и выборка товаров

Новый топик
Страницы: 1  |  2
02.10.2013, 09:00
Ответить | Цитировать
Гость
Гость

Всем привет.
Только начинаю изучать NetCat и потому возникают некоторые вопросы, к которым к сожалению ответов пока не знаю или может плохо ищу)
Один из N вопрос заключается вот в чем:
Есть интернет-магазин и к нему нужно прикрутить поиск и выборку по товарам.
Конечно, есть стандартный модуль поиска, но в данном случае нам он не подходит.
Допустим, форма с поиском у нас будет находится в шапке сайте, а сам каталог с товарами в центре сайта. При вводе слова в поиск у нас должен появится тот же каталог с товарами, в том же месте, но только с тем названием, который мы ввели в поисковую форму.
Буду рад выслушать всех и каждого!
Спасибо.
02.10.2013, 12:46
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Не совсем понятна идея.
Вы хотети чтобы товары искались без перезагрузки страницы или с автозаполнением, а может и тем и другим?

Модуль поиска предназначен искать по всему сайту или по определенным местам сайта
Поиск в компоненте предназначен для поиска среди объектов компонента

Чтобы искать по каталогу товаров то для этого вам нужно организовать поиск по компоненту ведь по нему вы и хотите искать а не по сайту чтобы использовать модуль поиска.

http://netcat.ru/developes/docs/components/searching-and-selection/
• Создайте шаблон именуйте "Все товары"
• В системных настройках укажите $ignore_sub = $ignore_cc = 1; *
• Создайте раздел именуйте "Поиск", укажите компонент с товарами и шаблон "Все товары"
• Создайте шаблон именуйте "Поиск"
• В префикс забейте $searchForm **
• Сгенерируйте альтернативную форму поиска. Не забудьте сперва отметить поля для поиска соответствующими галочками в настройках полей. В action формы укажите путь к шаблону "Все товары"(путь к разделу вида /ishop/search/)
• С помощью функции s_list_class(0,$cc ***,"nc_ctpl=2020 ****") вставьте в нужное место в макете


* Это позволит выбрать все товары из всех разделов
** HTML-код, в альтернативной форме поиска, будет доступен в префиксе или суффиксе списка объектов в переменной $searchForm. Форму поиска можно переопределить по своему усмотрению.
*** Укажите номер компонента в разделе
**** Укажите номер шаблона компонента

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
02.10.2013, 13:20
Ответить | Цитировать
Гость
Гость

Сделал как Вы сказали, поиск работает, то появились вопросы по такому поиску.
У меня получилась такая ссылка:
/каталог/поиск/?action=index&ignore=1&admin_mode=&srchPat%5B1%5D=поисковое слово
1. Можно ли искать сразу из каталога, а не из раздела, который предназначен для поиска?
2. Как искать сразу например по 2-ум полям из одной формы?
3. После srchPat прописываются не понятные символы, можно ли от них избавиться?
Спасибо, жду ответа!
02.10.2013, 16:10
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

1 В системных настройках вашего компонента с товарами укажите условие
if($_GET['search_action']=='1') { $ignore_sub = $ignore_cc = 1; }
в форме поиск добавить поле <input type='hidden' name='search_action' value='1'>
Таким образом если мы выполнили поиск то вывести все товары согласно поиску на той странице на которой мы находимся.
Обязательно в этом случаи мы должны находится на странице с каталогом товаров(не важно на какой). Что бы избежать этого нужно проставить условия в action формы например если мы на странице с товарами то "оставить как есть" иначе "ставьте свой путь где искать. к той же странице поиска"

2 Исправьте поиск и выборку где у вас поле для поиска вместо значения name впишите свое например name_brand
После поиска строка станет выглядеть так
каталог/поиск/?action=index&ignore=1&search_action=1&admin_mode=&name_brand=поисковое слово
В системных настройках компонента пропишите
$query_where ="a.Checked = 1";
if ($_GET['search_action']) $query_where .= " AND (a.Name LIKE '%$_GET['search_action']%' OR a.Brand LIKE '%$_GET['search_action']%')";


3 Это кириллица в юникоде все в порядке не избавитесь.

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
03.10.2013, 10:30
Ответить | Цитировать
Гость
Гость

Почему-то не хочет работать...
После прописки Вашего кода в системных настройках пишет: Ошибка кода в поле «Системные настройки» компонента.
При поиске в браузерной строке выводит: /?action=index&ignore=1&admin_mode=&search_action=1
В каталоге же показываются все товары.
А вот, что я сделал:
Системные настройка компонента "Товар":
Код:
if($_GET['search_action']='1') { $ignore_sub = $ignore_cc = 1; }
$query_where ="a.Checked = 1";
if ($_GET['search_action']) $query_where .= " AND (a.name LIKE '%$_GET['search_action']%' OR a.brand LIKE '%$_GET['search_action']%')";


Шаблон "Поиск" компонента "Товар":
Код:
<form action='/каталог/поиск/' method='get'>
<? if ($admin_mode || $inside_admin) : ?>
<input type='hidden' name='admin_mode' value='1' />
<input name='catalogue' type='hidden' value='<?= $catalogue ?>' />
<input name='cc' type='hidden' value='<?= $cc ?>' />
<input name='sub' type='hidden' value='<?= $sub ?>' />
<? endif; ?>
<? if ($inside_admin) : ?>
<input type='hidden' name='inside_admin' value='1'>
<? endif; ?>
<input type='hidden' name='action' value='index'>
<input type='hidden' name='ignore' value='1'>
<input type='hidden' name='admin_mode' value='<?= $admin_mode ?>'>
<input type='text' name_brand='srchPat[0]' size='30' maxlength='255' value='' placeholder='Поиск'>
<input type='hidden' name='search_action' value='1'>
<input value='<?= NETCAT_SEARCH_FIND_IT ?>' type='submit'>
</form>
03.10.2013, 11:50
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

А вы не забыли про <? ?> в системных настройках?
<input type='text' name_brand='srchPat[0]' size='30' maxlength='255' value='' placeholder='Поиск'> и насчет этого поля я писал что должны изменить name поля
<input type='text' name_brand='name_brand' size='30' maxlength='255' value='' placeholder='Поиск'>
После всех этих действий шаблон Все товары становится лишним.

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
03.10.2013, 14:18
Ответить | Цитировать
Гость
Гость

Нет, про <? ?> я не забыл.
Вы писали, что нужно "в форме поиск добавить поле <input type='hidden' name='search_action' value='1'>",а не изменять поле "name".
Вот измененная форма в шаблоне "Поиск":
<form action='/каталог' method='get'>
<? if ($admin_mode || $inside_admin) : ?>
<input type='hidden' name='admin_mode' value='1' />
<input name='catalogue' type='hidden' value='<?= $catalogue ?>' />
<input name='cc' type='hidden' value='<?= $cc ?>' />
<input name='sub' type='hidden' value='<?= $sub ?>' />
<? endif; ?>
<? if ($inside_admin) : ?>
<input type='hidden' name='inside_admin' value='1'>
<? endif; ?>
<input type='hidden' name='action' value='index'>
<input type='hidden' name='ignore' value='1'>
<input type='hidden' name='admin_mode' value='<?= $admin_mode ?>'>
<input type='hidden' name='search_action' value='1'>
<input type='text' name_brand='search_action' size='30' maxlength='255' value='' placeholder='Поиск'>
<input value='<?= NETCAT_SEARCH_FIND_IT ?>' type='submit'>
</form>

<?
А это системные настройки самого компонента может быть допущена ошибка в коде?):
if($_GET['search_action']='1') { $ignore_sub = $ignore_cc = 1; }
$query_where ="a.Checked = 1";
if ($_GET['search_action']) $query_where .= " AND (a.Name LIKE '%$_GET['search_action']%' OR a.Brand LIKE '%$_GET['search_action']%')";
?>

Ничего не изменилось, все так же показывает "Ошибку в системных настройках" и после поиска выводится весь список товаров ("/?action=index&ignore=1&admin_mode=&search_action=1").
Хотелось, чтобы поиск работал с любого места на сайте и без дополнительного раздела, типа "Поиск".
Что мне нужно изменить или добавить для правильной работы поиска?
03.10.2013, 15:31
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Опечатку имени поля я исправил
search_action это скрытое поля
name_brand поле для поиска.
Вы сами себе противоречили
Цитата:
Вы писали, что нужно "в форме поиск добавить поле <input type='hidden' name='search_action' value='1'>",а не изменять поле "name".

А добавили как поля для поиска.
Цитата:
2 Исправьте поиск и выборку где у вас поле для поиска вместо значения name впишите свое например name_brand

И я сказал что имя в поле для поиска также нужно изменить

Да в системных настройках опечатка не хватает знака равенства.

if($_GET['search_action']=='1') { $ignore_sub = $ignore_cc = 1; }
$query_where ="a.Checked = 1";
if ($_GET['search_action']) $query_where .= " AND (a.Name LIKE '%$_GET['search_action']%' OR a.Brand LIKE '%$_GET['search_action']%')";

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

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
18.11.2013, 21:18
Ответить | Цитировать
Egorov Serg

Зарегистрирован:
2013-11-05
Сообщений: 15

Здравствуйте! Голову сломал - как делается запрос в бд в системных настройках в поиске по каталогу?
Как сделать запрос в системных настройках компонента?
<?php
if($_GET['search_action']=='1') {

$ignore_sub = $ignore_cc = 1;

$words = explode(" ",$srchPat[0]);
$query_where .= "(";
foreach ($words as $word) {
$query_where .= " a.Name LIKE '%$word%' OR a.Description LIKE '%$word%' OR ";
}
$query_where .= " )";
$query_select .= "a.Name as Name,a.Description as Description, a.Details as Details, ";
$query_select .= "a.Price as Price, a.Image as Image ";

//SELECT $query_select FROM `Message505` AS a WHERE $query_where;


}
?>
чтобы выодил товары в объекте вывода $f_Name,$f_Image и т.д.???

В рез - те товары не выводит....Ошибка в функции вывода объектов.
18.11.2013, 22:03
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Воспользуйтесь моим примером:
Код:

if($subject) {
$subject=ereg_replace(' +',' ',$subject); // убираем лишние пробелы
$srch_patr=explode(" ", $subject); // делим фразу на слова
$srch_patr = array_unique($srch_patr); // убираем дубликаты слов
foreach ($srch_patr as $key)
{
$query_where .= " AND (a.Name LIKE '%$key%' OR a.Artikul LIKE '%$key%' OR a.Description LIKE '%$key%' OR a.Details LIKE '%$key%')";
};
}

query_select вам использовать не нужно, уберите эти строчки. Нужные поля и так будут доступны в "объекте в списке".

19.11.2013, 08:57
Ответить | Цитировать
Egorov Serg

Зарегистрирован:
2013-11-05
Сообщений: 15

Спасибо! Ошибка функции вывода не пропала, товаров я не вижу. Что может быть? Сайт http://www.prod-ss.ru/
форма
<form action='/catalog/search/' method='get'>
<? if ($admin_mode) : ?>
<input type='hidden' name='action' value='index' />
<input type='hidden' name='admin_mode' value='<?= $admin_mode ?>' />
<? endif; ?>
<? if ($inside_admin) : ?>
<input type='hidden' name='inside_admin' value='1' />
<input type='hidden' name='cc' value='<?= $cc ?>' />
<? endif; ?>
<input type='text' name='srchPat[0]' size='100' maxlength='255' value='<??>'/>
<input type='hidden' name='search_action' value='1'/>
<input value='<?= NETCAT_SEARCH_FIND_IT ?>' type='submit' />
</form>
198 196 2014-05-14 10:20:17 13332
Страницы: 1  |  2
Описание проекта