Поиск по артикулу или SKU

  • Поиск по артикулу или SKU

Часто, когда клиент диктует модель по телефону, или менеджеру нужно порекомендовать аналогичный товар, происходит путаница в цифрах или буквах товара а так-же в раскладке клавиатуры при вводе модели в строку поиска. Значительно упростить и ускорить процесс помежет вывод цифрового артикула товара и поиск по артикулу.

Вывод Артикула-sku в карточку товара

catalog\view\theme\default\template\product\product.tpl
После
              <tr>
                <td><b><?php echo $text_model; ?></b></td>
                <td><?php echo $model; ?></td>
              </tr>
добавить
              <tr>
                <td><b><?php echo $text_sku; ?></b></td>
                <td><?php echo $sku; ?></td>
              </tr>

catalog\controller\product\product.php
после
$this->data['manufacturer'] = $product_info['manufacturer'];
добавить
$this->data['sku'] = $product_info['sku'];


catalog\language\russian\product\product.php
после
$_['text_model']          = 'Модель:';
добавить
$_['text_sku']          = 'Артикул:';


Вывод Артикула-sku в категорию
catalog\language\russian\product\category.php
после
$_['text_product']      = 'Товары';
добавить
$_['text_sku']          = 'Артикул:';


catalog\view\theme\default\template\product\category.tpl
после, или в другом, нужном месте
<b><?php echo $products[$j]['name']; ?></b></a><br />
добавть
<b><?php echo $text_sku; ?></b> <?php echo $products[$j]['sku']; ?><br />


catalog\controller\product\category.php
после
            $this->data['text_sort'] = $this->language->get('text_sort');
добавить
            $this->data['text_sku'] = $this->language->get('text_sku');

после
                    $this->data['products'][] = array(
                        'name'    => $result['name'],
добавить
                'sku'    => $result['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';
}

catalog/language/russian/product/search.php
После
$_['entry_model']       = 'Поиск по модели';
добавить
$_['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'] : '');
на

После
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 .= ")";




Поиск всегда по Наименованию и по SKU, а по Описанию и по Модели - в соответствии с чекбоксами.
Для точности ищется только точное совпадение SKU, в первом варианте - ищет SKU которые начинаются с введённой поисковой фразы.

заменить
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) . "')";
}
в двух местах

Теги: поиск, артикул, sku