Ремонт компьютера
Сборка, чистка, апгрейт ремонт любой техники.
Замена частей, установка ПО, установка Windows, антивируса.
Удаленная помощь без вызова на дом.
Создание сайта
Создание сайта с нуля, модулей, скриптов для сайта.
Движки Joomla, Wordpress, Opencart, Prestashop и тд.
SEO продвижение, ремонт, оптимизация сайта.

Создаем прайс лист для печати Opencart v2

Недостаточно было первой версии была создана эта версия вместе с плагином, позже конечно было создана 3 версия, она в разы проще и лучше.

2 метод с поддержкой AJAX но сложнее

Создаем прайс лист для печати Opencart v2

Устанавливаем wholesalepricelistv1.3.1.zip
скачать его можно на opencart ссылка тут.
Или с моего файлового сервера:
  Скачать wholesalepricelistv1.3.1.zip (скачен: 122)
Описание можно почитать там же, просто закидываем все что в архиве в корень сайта.

Выполняем после установки модуля и активации его в админке.

Можно потестить на сайте proclimate.by.

1

Это для тех у кого плагины типо filterPro и тд. Кнопка теперь ОБЯЗАТЕЛЬНО располагаеться в навигации, так как он обновляет и навигацию, а значит будет обновлять и нашу кнопочку при ajax.

Выше описанные действия не ВЫПОЛНЯТЬ!! (хоть и может пахать вместе)

Плагин тот же, устанавливаем. Удаляем то что писали в category.tpl  чтобы не дублировать кнопку. Залазим в навигацию это файлик \system\library\pagination.php:

1) добавим новые переменные в него, мы их будем отсылать через ajax
Находим:
public $total = 0;
public $page = 1;
public $limit = 20;

после них добавляем новые:

public $cat_id ="0"; // будем отправлять категорию (обычный способ)
// будем отсылать массив товара на странице (то что выбрали фильтром)
public $product_id="";

Вот как вышло у меня:

1

2)Теперь в самом конце файлика находим return и правим его добавив :
return ($output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : '') .$print. '<div class="' . $this->style_results . '">' . str_replace($find, $replace, $this->text) . '</div>';

и перед return вставляем это:
$print='';
if ($this->cat_id!="0"){ // если без ajax
$cat_id= "&catid=".$this->cat_id;
$limit="&limit=".$limit;
$page="&page=".$page;
$print='
<div class="print">
<a href="/index.php?route=product/pricelist/printable'.$limit.$cat_id.$page.'" class="button" target="_blank">
<span>Печать</span>
</a>
</div>';
}else{ // если через ajax или фильтр
$product_id="";
if ($this->product_id!=""){
foreach ($this->product_id as $p_id)
$product_id.="_".$p_id[0];
if ($product_id!="") // получим вручную все нужные товары и отправим через форму
$print='
<div class="print">
<form method="post" action="/index.php?route=product/pricelist/printable">
<input name="submit" class="button" type="submit" value="Печать" />
<input name="product_id" type="hidden" value="'.$product_id.'" />
</form></div>
';
}
}

Вот как у меня вышло:

1

3) ищем в контроле \catalog\controller\product\category.php :
$parts = explode('_', (string)$this->request->get['path']);
Добавим после:
$parts = explode('_', (string)$this->request->get['path']);
$this->data['cat_id']=(int)array_pop($parts); // нужная нам id категории

4) в этом же файле добавим и id категории чтобы наша навигация, знала какая это категория. Ищем:
$pagination = new Pagination();

И после добавляем:

$pagination->cat_id = $category_id;

По логике верхний метод что без ajax должен на этой стадии так же уже работать, по выбранной категории с ajax. Но мне этого было мало, мне нужно было, чтобы учитывался filterpro и его выбранные товары по критериям летели на печать. Так что делаем дальше, ставим filterpro у кого нету, он тут.

5)Залазим в файлик filterpro \catalog\controller\module\filterpro.tpl и ищем:

$pagination = new Pagination();
Добавим после
$pagination->product_id=$product_id; // выбранные id товаров

6) поднимаемся чуть выше и видим строку

$result[] = array(

добавим перед ней:

$product_id[]=array($product['product_id']); // создаем массив товаров

Теперь у нас есть кнопочка в которой генерируеться id товаров выбранных. Есть ajax который подставляет в нее, то что клиент выберет. Теперь нужно чтобы файлик с печатью поддерживал наш массив, когда он прилетит к нему для это делаем.

7) откроем контрол прайс листа \catalog\controller\myoc\pricelist.php ищем:

$this->data['products'] = array();

после нее вставим:

$product_id="";
// получим все id что будем выводить
if (array_key_exists ('product_id',$this->request->post))
$product_id=$this->request->post['product_id'];
if ($product_id!=""){
// создадим массив их
$product_id_arr=explode('_', (string)$product_id); // создаем массив id
$products[]=array();
foreach ($product_id_arr as $p_id){
$product=$this->model_catalog_product->getProduct($p_id);
array_push($products,$product);
}
}else
// если не получили id то стандартный способ

так же исправляем вывод с ошибкой чуть ниже ищем
foreach($products as $product_info) {

после напишем:
// если пустой массив, или ошибки
if (empty($product_info)) continue;

Вот как у меня вышло:

1

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

Оформление правим

Мне непонравился вывод  qty и stock (на складе), быстро это уберем.

1)Теперь вывод принта откроем \catalog\view\theme\default\template\myoc\pricelist_print.tpl:

Ищем
</style>
перед ним добавим строку (класс который будет все убирать ненужное):

.none {display:none;} /* убрать то что напрягает */

2)Ищем теперь что убрать это qty:
<th class="qty"><?php echo $column_qty; ?></th>

Допишем в нее наш класс

<th class="qty none"><?php echo $column_qty; ?></th>

И ниже тоже ищем:
<td class="tright"><span class="<?php if(!$product['quantity']) { ?>nostock<?php } ?>"><?php echo $product['quantity']; ?></span></td>
<td>&nbsp;</td>

Заменим на:
<td class="tright"><span class="<?php if(!$product['quantity']) { ?>nostock<?php } ?>"><?php echo $product['quantity']; ?></span></td>
<td class=" none">&nbsp;</td>

3) Русским сделать можно в этом файлике catalog\language\english\myoc\precilist.php вот весь текст замените на этот:
<?php
// Heading
$_['heading_title'] = 'Прайс лист';

// Header Bar Title
$_[‘text_all_products’] = ‘Все продукты';

// Text
$_[‘text_pricelist’] = ‘Прайс лист';
$_[‘text_limit’] = ‘Товаров на странице:';
$_[‘text_empty’] = ‘Товаров не найдено.';
$_[‘text_category’] = ‘Категория:';
$_[‘text_sku’] = ‘SKU:';
$_[‘text_upc’] = ‘UPC:';
$_[‘text_ean’] = ‘EAN:';
$_[‘text_jan’] = ‘JAN:';
$_[‘text_isbn’] = ‘ISBN:';
$_[‘text_mpn’] = ‘MPN:';
$_[‘text_print’] = ‘Печать';
$_[‘text_notfound’] = ‘Товаров не найдено!';
$_[‘text_discount’] = ‘%s or more: %s';

//Table Columns
$_[‘column_number’] = ‘No.';
$_[‘column_image’] = ‘Изображение';
$_[‘column_name’] = ‘Название';
$_[‘column_model’] = ‘Модель';
$_[‘column_rating’] = ‘Рейтинг';
$_[‘column_price’] = ‘Прайс';
$_[‘column_stock’] = ‘На складе';
$_[‘column_qty’] = ‘Qty';
$_[‘column_action’] = ‘Действие';

//Errors
$_[‘error_customer_group’] = ‘Your current customer account does not have the necessary privileges to view the price list.';
?>
4) Так же заметил что прайс лист на сайте (который страницей) стал ужасен тоже поубирал столбцов:
вверху добавляем наш любимый класс:
ищем:
</style>
И перед ним ставим:

.none {display:none}

Теперь добавим в ненужные пункты

ищем строку

<th><?php if ($sort == 'p.price') { ?>

заменяем на

<th class="none"><?php if ($sort == 'p.price') { ?>

Ищем

<th><?php if ($sort == 'p.quantity') { ?>

и заменяем на

<th class="none"><?php if ($sort == 'p.quantity') { ?>

Ищем

<th><?php echo $column_qty; ?></th>

Заменяем на

<th class="none"><?php echo $column_qty; ?></th>

Вроде все, файликами наверное проще будет.

Название статьи при не правильной раскладке клавиатуры: Cjplftv ghfqc kbcn lkz gtXfnb Opencart v2
Если вдруг появилось желание поблагодарить автора,просто нажмите на рекламу чуть ниже, этого будет достаточно :)

Один отзыв

  1. Сергей:

    это же не подходит для опенкарт 2, только для 1,5,5 ?

Добавить комментарий

Ваш e-mail не будет опубликован.


Вставьте верное число *