Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Помощь нужен поиск по SKU артиклу


Recommended Posts

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

Link to comment
Share on other sites


Дело в том что SKU как правило предназначен для внутреннего использования, так же как и Расположение, поэтому ты ничего и не нашел ни у нас ни у буржуев.

А проблема по большому счету яйца выеденного не стоит и решается элементарно - добавлением условия в SQL-запрос. Уточни задачу и я тебе скажу что и где подправить.

Link to comment
Share on other sites

вот мой сайт http://mebelizstekla.in.ua/ прикладываю скриншот еще того что и где мне нужно post-9085-0-77373600-1310145604_thumb.jpg вот на скриншоте в расширеном поиске можно поставить галочку поиск по описанию и поиск по модели. для меня идеальным было бы добавить еще одну галочку поиск по коду товара (артикулу SKU везде по разному это называют) вот собственно то что меня интересует у меня в магазине каждому товару присвоен уникальный артикул вот поиск по ним мне нужно сделать для удобства когда клиент звонит он говорит код товара и я с легкостью смогу его найти ибо когда клиент говорит модель то постоянно путают то цифры то буквы. вот собственно такая задача стоит если сможете помогите пожалуйста смотрел я на разных форумах люди такое тоже ищут но решения не нашел но думаю тема актуальна. заранее огромное спасибо

Link to comment
Share on other sites


Тебе как сделать? что бы всё по умняку, с красивым кодом... или что-бы править было проще?

Link to comment
Share on other sites

Это по умняку...

Сначала правим вьювер.

Открываем файл catalog/view/theme/default/template/product/search.tpl

Ищем

<tr>
  <td colspan="2"><?php if ($model) { ?>
    <input type="checkbox" name="model" id="model" checked="checked" />
    <?php } else { ?>
    <input type="checkbox" name="model" id="model" />
    <?php } ?>
    <?php echo $entry_model; ?></td>
</tr>
и после найденного добавляем

<tr>
  <td colspan="2"><?php if ($sku) { ?>
    <input type="checkbox" name="sku" id="sku" checked="checked" />
    <?php } else { ?>
    <input type="checkbox" name="sku" id="sku" />
    <?php } ?>
    <?php echo $entry_sku; ?></td>
</tr>

почти в самом низу файла ищем

if ($('#model').attr('checked')) {
	url += '&model=1';
}
и после найденного добавляем

if ($('#sku').attr('checked')) {
	url += '&sku=1';
}

Так как мы добавили языковую переменную $entry_sku - добавим её в файл локализации...

Открываем файл catalog/language/russian/product/search.php

В конце файла, перед строкой

?>

добавляем

$_['entry_sku']         = 'Поиск по артикулу';

Вьювер готов, правим контроллер

Открываем файл catalog/controller/product/search.php

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}

Ищем

$this->data['entry_model'] = $this->language->get('entry_model');
и после найденного добавляем

$this->data['entry_sku'] = $this->language->get('entry_sku');

Ищем

if (isset($this->request->get['model'])) {
	$this->data['model'] = $this->request->get['model'];
} else {
	$this->data['model'] = '';
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$this->data['sku'] = $this->request->get['sku'];
} else {
	$this->data['sku'] = '';
}

Ищем

$product_total = $this->model_catalog_product->getTotalProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '');
и изменяем так

$product_total = $this->model_catalog_product->getTotalProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '', isset($this->request->get['sku']) ? $this->request->get['sku'] : '');

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}

Ищем

$results = $this->model_catalog_product->getProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '', $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));
и изменяем так

$results = $this->model_catalog_product->getProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '', isset($this->request->get['sku']) ? $this->request->get['sku'] : '', $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}
Если обратил внимание - несколько раз ищем и правим одно и то-же... Это я все правки указал в порядке следования.

С контроллером закончили - переходим к модели.

Открываем файл catalog/model/catalog/product.php

Ищем

public function getProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
и изменяем так

public function getProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sku = FALSE, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {

Ищем

if (!$description) {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";
} else {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%' OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if (!$model) {
	$sql .= ")";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
и изменяем так

$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";

if ($description) {
	$sql .= " OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($model) {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($sku) {
	$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";
}

$sql .= ")";

Ищем

public function getTotalProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE) {
и изменяем так

public function getTotalProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sku = FALSE) {

Ищем

if (!$description) {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";
} else {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%' OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if (!$model) {
	$sql .= ")";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
и изменяем так

$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";

if ($description) {
	$sql .= " OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($model) {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($sku) {
	$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";
}

$sql .= ")";
Всё.
  • +1 6
Link to comment
Share on other sites

Самый простой вариант...

Всегда ищет по Наименованию и по SKU, а по Описанию и по Модели - в соответствии с чекбоксами.

Для уменьшения промахов ищется только точное совпадение SKU, в варианте "по умняку" - ищет SKU которые начинаются с введённой поисковой фразы

Открываем файл catalog/model/catalog/product.php

Ищем в двух местах

if (!$model) {
	$sql .= ")";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
и изменяем в двух местах так

if (!$model) {
	$sql .= " OR p.sku = '" . $this->db->escape($keyword) . "')";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%' OR p.sku = '" . $this->db->escape($keyword) . "')";
}
Всё.
  • +1 4
Link to comment
Share on other sites

  • 3 months later...

изумительно работает как всегда спасибо Yesvik

единственно в модели сделал вот так

$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";

$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";

if ($description) {

$sql .= " OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";

}

if ($model) {

$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%'";

}

if ($inventorynumber) {

$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";

}

$sql .= ")";

после чего начало искать по части кода товара и из обычного поиска и из расширенного

не знаю чем мне это грозит но работает :-)

Link to comment
Share on other sites

К сожалению, очень запутано и непонятно описали.

Кто-то может помочь с более понятной инструкцией?

Спасибо.

Красным цветом и "-" отмечено, что надо убрать, зелёным и "+" то, что добавлено.

Имена изменяемых файлов можно увидеть в строках с "---/+++".

До и после изменений показаны 3-5 строк для облегчения поиска правильного места.

Здешние понятные описания отличаются только тем, что вместо "-" пишут словами "найдите вот это", а вместо "+" -- "замените на это".

В каких файлах искать - тоже видно. По аналогии. Красненькое и зелененькое. У меня ко всему прочему ещё и номера строк видны, по ним дополнительно можно сориентироваться в большом файле.

Что конкретно непонятно - объясните, возможно я смогу сделать подсказку понятней.

Link to comment
Share on other sites


Вот к примеру

Имена изменяемых файлов можно увидеть в строках с "---/+++".

--- a/public_html/catalog/model/catalog/product.php

+++ b/public_html/catalog/model/catalog/product.php

Я не очень понимаю смысла. Один и тот же файл.

Или тут имеется в виду, что в одном и том же файле, и удаляются и добавляются строки, то это только в заблуждение вводит?

Вот это откуда строчка?

@@ -106,10 +106,12 @@ class ModelCatalogProduct extends Model {

В целом, я все сделал. Спасибо большое, все ищет!

Link to comment
Share on other sites


Подскажите. Когда делаю поиск по SKU поиск начинает тормозить. Без него не тормозит. Как быть??? Буду очень благодарен.

Link to comment
Share on other sites


oae, добавьте индекс по этому полю в БД:

ALTER TABLE `opencart_product` ADD INDEX ( `sku` )

Вместо "opencart_" свой префикс поставьте

Link to comment
Share on other sites


oae, добавьте индекс по этому полю в БД:

ALTER TABLE `opencart_product` ADD INDEX ( `sku` )

Вместо "opencart_" свой префикс поставьте

Спасибо за подсказку но это не помогло.

Если оставляешь только по полю name то ищет 1 сек.

Если оставляешь по полю sku ищет 4-5 сек. Индекс добавил тоже самое.

Если делаешь и по тому и потому полю ищет тоже 4-5 сек. что с индексом что без. не зависимо от того что ввожу в поле поиск.

:(

Помогите!!!! Вторую ночь не сплю а сделать не могу.

Link to comment
Share on other sites


  • 5 months later...
  • 11 months later...

Нужен отдельный модуль поиска, только по артикулу. Подскажите, как можно реализовать?

 

Ау, есть кто живой?

Link to comment
Share on other sites


  • 1 month later...

Нужен отдельный модуль поиска, только по артикулу. Подскажите, как можно реализовать?

 

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.