Перейти к содержанию
stream3k

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

Рекомендуемые сообщения

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Открываем файл 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Всегда ищет по Наименованию и по 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо, очень полезное решение.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

Вот тоже самое бы на 1.5.1.1

Во вьювере таких конструкций уже нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

изумительно работает как всегда спасибо 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 .= ")";

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тоже самое бы на 1.5.1.1

Во вьювере таких конструкций уже нет.

Я для 1.5.1.{1,2,3} описывал поиск по SKU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я для 1.5.1.{1,2,3} описывал поиск по SKU

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

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

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Спасибо.

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот к примеру

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

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

:(

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.