Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Свой модуль поиска


Recommended Posts

Добрый день. У меня есть свой селективный поиск, но он полностью на пхп в одном файле. Может кто подскажет как его пересобрать под модули опенкарта. не могу понять куда чего раскидывать. Читал мануалы по созданию модулей, не разобрался. Заранее очень благодарен.

Надіслати
Поділитися на інших сайтах


эм.. можно файл?

Держи. правда там немного накручено. обьясню смысл. Имеется селектор, кототрый заполняется данными из базы. Сначала первый->на основании выбора позиции идет следующий с выборкой из базы всех записей с вхождением под выбранную позицию->третий по такому же принципу, потом на основании трех полей формируется запрос, выборка из базы и вывод полученного.

select_search.php

Надіслати
Поділитися на інших сайтах


да, но логика будет таже. мне просто пренести под mvc, как оно будет выбираться я сам пределаю. просто в опен карте дописаны пару таблиц с ключевыми полями, на основании резульирующего запроса выбираются позиции с этими ключевыми полями (ид товара), а потом вывод товаров по этим айдишникам

Надіслати
Поділитися на інших сайтах


Для более детального описания. Имеется таблица с марками авто, из нее заполняется первый селект. Имеет таблица с моделями авто, где каждая модель привязана к марке, из нее делается наполнение второго селекта на основании выбранной марки, имеется таблица с моделями и обьемами двигателей, выбирается и заполняется по тому же принципу, формируется запрос к таблице применяемостей где сравниваются все позиции и выбираются id товара. После чего формируется вывод из product, product_desription и тд opencart'a. Вот как то так. скрипт рабочий, но как его подвинтить под модули не могу разобраться

Надіслати
Поділитися на інших сайтах


Просто не могу понять логику работы этой mvc. Как получить данные из селектов, куда их заносить где обрабатывать. Насколько я понял выборка происходит в model, но туда ли надо все обработчики пихать, или там только процедура выборки. А в контроллере получение данных из формы занесение в переменную и передача в model. ?

Надіслати
Поділитися на інших сайтах


пример набросайте что бы было с чего начать

например

catalog/controller/search/search.php имя контроллера ControllerSearchSearch

catalog/model/search/search.php ModelSearchSearch

catalog/language/russian/search/search.php

catalog/view/theme/default/template/search.tpl

по аналогии с product.php например, только убрать всё лишнее, минимум кода. каркас так сказать

Надіслати
Поділитися на інших сайтах

language - список языковых констант

model - в основном всё что касается базы

$this->db указатель на драйвер используемой базы. список методов можно посмотреть тут system/library/db.php, наиболее часто используется query()

view - шаблон, рендерится контроллером

controller главное звено в mvc к нему приходят запросы пользователя, он же решает какой дать ответ

Надіслати
Поділитися на інших сайтах

например эта часть

// выводим все строки из столбца name таблицы country

в модели метод

public function getAllCountries($limit=0) {
   $sql = "SELECT * FROM " . DB_PREFIX . "selector";
   if ($limit) {
	   $sql .= " LIMIT " . (int)$limit;
   }
   $query = $this->db->query($sql);
   return $query->rows;
}

в контроллере

   	 $this->load->model('search/search');  
		$countries =  $this->model_search_search->getAllCountries(11);
		$this->data['countries'] =>$countries;
	    $this->data['country'] = false;
	    if (isset($this->request->post['country'])) {
		    $this->data['country'] = $this->request->post['country'];
	    }

во view

<select name="country"  style="width: 250px;">
<option><?php echo $text_manufacturer ?></option>
<?php foreach($countries as $country_item) { ?>
	  <option <?php if ($country_item['brend_name'] == $country) echo 'selected="selected"'?> value="<?php echo $country_item['brend_name'] ?>" > $country_item['brend_name'] </option>
<?php } ?>
</select>

пишу без интерпретатора, потому возможны ошибки, но главное суть

  • +1 2
Надіслати
Поділитися на інших сайтах

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

контроллер

<?php
class ControllerSearchSearch extends Controller { 
public function index() {
	 $this->data['post_action'] = $this->url->link('search/search');
	 $this->load->model('search/search'); 
			    $brands =  $this->model_search_search->getAllBrands();
			    $this->data['brands'] = $brands;
			    $this->data['brand_check'] = false;
		   
   if (isset($this->request->post['brand_check'])) {
			   
    $this->data['brand_check'] = $this->request->post['brand_check'];
   
    $models = $this->model_search_search->getAllModels();
			    $this->data['models'] = $models;
			    $this->data['models_check'] = false;
	
		    }
   


if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/search/search.tpl')) {
   $this->template = $this->config->get('config_template') . '/template/search/search.tpl';
  } else {
   $this->template = 'default/template/search/search.tpl';
  }
 
  $this->children = array(
   'common/column_left',
   'common/column_right',
   'common/content_top',
   'common/content_bottom',
   'common/footer',
   'common/header'
  );
   
  $this->response->setOutput($this->render());
}
}
?>

модель

<?php
class ModelSearchSearch extends Model { 
public function getAllBrands() {
 
  $sql = "SELECT * FROM autobrands";
  $sort_data = array(
    'brands'
   );		

$query = $this->db->query($sql);
return $query->rows;
}
public function getAllModels() {
$sql = "SELECT models FROM automodels WHERE brands LIKE ".$this->data['brand_check']."";
  $sort_data = array(
    'models'
   );		

$query = $this->db->query($sql);
return $query->rows;

}
}
?>

вью

<form action="<?php echo $post_action; ?>" method="post">
<select name="brand_check"  style="width: 250px; onchange="document.getElementById('frm').submit()"">
<option></option>
<?php foreach($brands as $brands_item) { ?>
		  <option <?php if ($brands_item['brands'] == $brand_check) echo 'selected="selected"'?> value=<?php echo $brands_item['brands']?> > <?php echo $brands_item['brands'] ?> </option>
   
   
<?php } ?>
</select>
<select name="models_check"  style="width: 250px;">
<option></option>
<?php foreach($models as $models_item) { ?>
		  <option <?php if ($models_item['models'] == models_check) echo 'selected="selected"'?> value=<?php echo $models_item['models']?> > <?php echo $models_item['models'] ?> </option>
   
   
<?php } ?>
</select>
</form>

Может я неправильно обьявил переменную во 2м запросе в модели?

Надіслати
Поділитися на інших сайтах


как правильно занести данные из полученного post в переменную и передать в модель для участия в запросе? и можно ли сделать событие onchange в селекте как в моем примере первоначальном


<form id="frm" method="post">

<select name="country" onchange="document.getElementById('frm').submit()" style="width: 250px;">

Надіслати
Поділитися на інших сайтах


$sort_data = array(
лишние

WHERE brands LIKE ".$this->data['brand_check'].""
данные следует эскейпить
$this->db->escape($this->data['brand_check'])

<form id="brands_form" action="<?php echo $post_action; ?>" method="post">
<select name="brand_check"  style="width: 250px;" onchange="$('#brands_form').submit()">
  • +1 1
Надіслати
Поділитися на інших сайтах

Изменение формы удается, только переменная правильно не заносится. Ошибка в синтаксисе sql пишет. Запрос имеет такой вид

$sql = "SELECT `models` FROM `automodels` WHERE `brands` LIKE ".$this->db->escape($this->data['brand_check'])."";

От ошибки избавился, но переменная пустая

Надіслати
Поділитися на інших сайтах


Warning: Missing argument 1 for ModelSearchSearch::getAllModels(), called in C:xampphtdocscatalogcontrollersearchsearch.php on line 14 and defined in C:xampphtdocscatalogmodelsearchsearch.php on line 13Notice: Undefined variable: brand_check in C:xampphtdocscatalogmodelsearchsearch.php on line 15

Все работает, не усмотрел, в контроллере тоже надо было аргумент поставить

Надіслати
Поділитися на інших сайтах


Впринципе смысл понятен. Сейчас допишу этапы поиска, потом сам поиск и вот встает вопрос. как вывести результаты на сайт? А то сейчас все это дело выводится на белом листе. Как интегрировать в шаблон как скажем стандартный поиск? Огромное спасибо за помощь. По-тихоньку начинаю вникать в mvc.

Заглянул в другие .tpl. Все элементарно просто. Глупый был вопрос

Надіслати
Поділитися на інших сайтах


А может и мне с поиском поможете?

Доработать поиск по сайту на OpenCart 1.5.1.3

По умолчанию поиск реализован по любому слову из поисковой фразы, в результате всегда выводится слишком много результатов,

а если товар однотипный и соответственно названия тоже однотипные то вываливает почти весь магазин....

Мне подправили поиск, чтобы он искал по фразе целиком, ситуация улучшилась, но все равно есть недостатки, например:

Есть у меня товар с названием: Аккумулятор для Palm M500

Если ввести запрос: Аккумулятор Palm M500 (т.е. просто безя "для") то уже ничего не находит...

Не знаю как избавится от этого недостатка, пока пришло в голову сделать список стоп слов, куда внести это "для",

т.е. чтобы при поиске это "для" вообще не учитывалось.

И еще как вариант можно попробывать версию поиска, в которой опускается любое русское слово до 3-х (включительно)букв.

Так же нужно сделать чтобы поиск работал по полю "модель" и SKU (имею в виду поиск на фронтпейдж)

И еще есть такая идея, если конечно можно так реализовать, чтобы если в запросе есть и русские слова (на русском языке)и

английские, то все русское опускалось и поик делался только по англоязычной части запроса(цифры тоже остаются), например, запрос:

Аккумулятор для Palm M500

"Аккумулятор для" - должно вырезаться и поиск должен сработать по точной фразе Palm M500

Если запрос будет просто: "Аккумулятор" то ничего не вырезаем, делаем поиск по полной русскоязыной фразе

Правка чтобы поиск работал по Модели и SKU есть тут http://rb.labtodo.com/page/better-search-in-opencart-v15-search-description-by-default#comment-1135

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

Т.е. в результате выполнения ТЗ Вы должны предоставить 3 версии исправленного файлаов, в котором идет обработка поиска.

1 вариант файлаов.

Запрос обрабатывается по полной фразе, а не по любому слову из запроса.

Обработка сразу запроса по полю Модель и SKU (т.е. делаем поиск в этих полях тоже сразу по умолчанию)

В любом запросе не учитываем слово "для" т.е. оно просто вырезается из поискового запроса и не участвует в поиске.

2 вариант файлаов.

Запрос обрабатывается по полной фразе, а не по любому слову.

Обработка сразу запроса по полю Модель и SKU (т.е. делаем поиск в этих полях тоже сразу по умолчанию)

в любом запросе опускается любое русское слово до 3-х (включительно)букв.

3 варинт файлаов

Запрос обрабатывается по полной фразе, а не по любому слову.

Обработка сразу запроса по полю Модель и SKU (т.е. делаем поиск в этих полях тоже сразу по умолчанию

В поисковом запросе, если он состоит из английского и русского текста, вырезается русскоязычная часть, а англоязычная оставляется, так же все цифры что были,

и по ним уже делается поиск. Если запрос полностью на русском, то ничего не вырезается, исщем по полной фразе на русском.

Готов оплатить за эту доработку, если будут предоставлены готовые к использованию исправленные и доработанные файлы.

ася 203-410-102

Надіслати
Поділитися на інших сайтах


В поисковом запросе, если он состоит из английского и русского текста, вырезается русскоязычная часть, а англоязычная оставляется, так же все цифры что были,

и по ним уже делается поиск. Если запрос полностью на русском, то ничего не вырезается, исщем по полной фразе на русском.



if(preg_match('/[^a-zA-Z]/', $string)){
$string = preg_replace('/[^а-яА-я]/','', $string);
далее обычный поиск
} else {
поиск }


В любом запросе не учитываем слово "для" т.е. оно просто вырезается из поискового запроса и не участвует в поиске.

$str = "Товар для Покупателя";
$str = preg_replace("/(для)/",'',$str);
результат = Товар Покупателя

По поводу поиска по всей фразе если я не ошибаюсь нужно заменить в запросе OR на AND

https://opencartforum.com/topic/3410-%d1%83%d0%bb%d1%83%d1%87%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be%d0%b8%d1%81%d0%ba%d0%b0-%d1%82%d0%be%d0%b2%d0%b0%d1%80%d0%be%d0%b2/page__view__findpost__p__67241

как-то так

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.