Наработки Opencart

Тема в разделе "OpenCart", создана пользователем gavag, 28 фев 2013.

  1. gavag

    gavag

    Регистрация:
    5 янв 2013
    Сообщения:
    112
    Симпатии:
    10
    Есть много (у каждого такого) чем можно поделиться: К примеру (дописываем, изменяем, дополняем, ... ...) дефолтовые модули и возможности движка ОПК. К примеру, меня один заказчик попросил отображать (показывать товар (определенный товар)) в зависимости от зарегистрирован/не зарегистрирован и в зависимости от групп пользователей. Получилось неплохое дополнение.
     
  2. gavag

    gavag

    Регистрация:
    5 янв 2013
    Сообщения:
    112
    Симпатии:
    10
    И так для начала (все это для сборки maxystore_v1.5.4.1:думаю подойдет и для других) я добавил одно поле (visibility int(11)) в таблице [​IMG]product - добавил я его в конец списка (не принципиально).
    Админ часть - дополнительный пункт появиться в закладке "Данные" (Группа покупателей)
    Далее:
    admin\language\russian\catalog\ -> product.php -> //Entru вставляем $_['entry_customer_group'] = 'Группа покупателей:';, а в //Info $_['info_visibility'] = '<span class="help">Видимость товара в зависимости от группы пользователей.<span>';

    1. admin\view\template\catalog\ -> product_form.tpl
    Код:
    		<tr>
    			  <td><?php echo $entry_customer_group; ?></td>
    			  <td><select name="visibility">
    					<?php foreach ($customer_groups as $customer_group) { ?>
    					<?php if ($customer_group['customer_group_id'] == $visibility) { ?>
    					<option value="<?php echo  $customer_group['customer_group_id']; ?>" selected="selected"><?php echo $customer_group['name']; ?></option>
    					<?php } else { ?>
    					<option value="<?php echo $customer_group['customer_group_id']; ?>"><?php echo $customer_group['name']; ?></option>
    					<?php } ?>
    					<?php } ?>
    				  </select></td><td><?php echo $info_visibility; ?></td> 
    			  </td>
    			</tr>
    
    2. admin\controller\catalog\ -> product.php

    в private function getForm() { добавляем $this->data['entry_customer_group'] = $this->language->get('entry_customer_group'); и $this->data['info_visibility'] = $this->language->get('info_visibility'); соответственно.

    Примерно начиная со строки 860 вставляем следующий код:
    Код:
    		if (isset($this->request->post['visibility'])) {
    			  $this->data['visibility'] = $this->request->post['visibility'];
    		} elseif (!empty($product_info)) {
    			$this->data['visibility'] = $product_info['sku'];
    		} else {
    			  $this->data['visibility'] = '';
    		}
    3. admin\model\catalog\ -> product.php
    function addProduct -> visibility = '". (int)$data['visibility'] ."', - после weight_class_id = (не существенно);
    function editProduct -> visibility = '". (int)$data['visibility'] ."', - так же;
    function copyProduct -> $data['visibility'] = ''; - думаю понятно где;
    и добавляем (можно в самом конце):
    Код:
    	public function getTotalProductsByVisibilityClassId($visibility) {
    		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE visibility = '" . (int)$visibility . "'");
     
    		return $query->row['total'];
    	}
    Вроди все учел, с клиентской частью проще.
     
  3. VetalySd

    VetalySd

    Регистрация:
    6 фев 2013
    Сообщения:
    57
    Симпатии:
    25
    Предлагаю Вашему вниманию доработку для OPENCART которая позволит в админке настроить и выводить КОНТАКТЫ в шапке сайта.

    Как это выглядит. см. скриншоты или здесь http://krazdo.com/ [​IMG] [​IMG][​IMG][​IMG]

    Итак приступим.
    Скачайте архив contacts.zip и залейте в корень сайта.

    Откройте файл /admin/view/template/setting/setting.tpl
    и после строк

    Код:
    <tr>
     
    <td><span class="required">*</span> <?php echo $entry_address; ?></td>
     
    <td><textarea name="config_address" cols="40" rows="5"><?php echo $config_address; ?></textarea>
     
    <?php if ($error_address) { ?>
     
    <span class="error"><?php echo $error_address; ?></span>
     
    <?php } ?></td>
     
    </tr>
    вставляем

    Код:
    <tr>
    <td><?php echo $entry_marg_left; ?></td>
    <td><input type="text" name="config_marg_left" value="<?php echo $config_marg_left; ?>" /></td>
    </tr>
    <tr>
    <td><?php echo $entry_marg_top; ?></td>
    <td><input type="text" name="config_marg_top" value="<?php echo $config_marg_top; ?>" /></td>
    </tr>
     
    <tr>
    <td><?php echo $entry_con; ?>-1</td>
    <td><input type="text" name="config_con1" value="<?php echo $config_con1; ?>" /><?php echo $entry_headico; ?><input type="text" name="config_headico1" value="<?php echo $config_headico1; ?>" /></td>
    </tr>
     
    <tr>
    <td><?php echo $entry_con; ?>-2</td>
    <td><input type="text" name="config_con2" value="<?php echo $config_con2; ?>" /><?php echo $entry_headico; ?><input type="text" name="config_headico2" value="<?php echo $config_headico2; ?>" /></td>
    </tr>
     
    <tr>
    <td><?php echo $entry_con; ?>-3</td>
    <td><input type="text" name="config_con3" value="<?php echo $config_con3; ?>" /><?php echo $entry_headico; ?><input type="text" name="config_headico3" value="<?php echo $config_headico3; ?>" /></td>
    </tr>
    
    далее открываем /admin/language/russian/setting/setting.php

    находим
    Код:
    $_['entry_address'] = 'Адрес магазина:';
    
    после нее вставляем
    Код:
    $_['entry_marg_left'] = 'Отступ слева в PX:';
    $_['entry_marg_top'] = 'Отступ сверху в PX:';
    $_['entry_con'] = 'Контакт';
    $_['entry_headico'] = 'Иконка';
    

    открываем /admin/controller/setting/setting.php

    находим

    Код:
    $this->data['entry_address'] = $this->language->get('entry_address');
    
    после нее вставляем

    Код:
    $this->data['entry_marg_left'] = $this->language->get('entry_marg_left');
    $this->data['entry_marg_top'] = $this->language->get('entry_marg_top');
    $this->data['entry_con'] = $this->language->get('entry_con');
    $this->data['entry_headico'] = $this->language->get('entry_headico');
    
    находим

    Код:
    if (isset($this->request->post['config_address'])) {
    $this->data['config_address'] = $this->request->post['config_address'];
    } else {
    $this->data['config_address'] = $this->config->get('config_address');
    }
    
    после вставляем

    Код:
    if (isset($this->request->post['config_marg_left'])) {
    $this->data['config_marg_left'] = $this->request->post['config_marg_left'];
    } else {
    $this->data['config_marg_left'] = $this->config->get('config_marg_left');
    }
     
    if (isset($this->request->post['config_marg_top'])) {
    $this->data['config_marg_top'] = $this->request->post['config_marg_top'];
    } else {
    $this->data['config_marg_top'] = $this->config->get('config_marg_top');
    }
     
    if (isset($this->request->post['config_con1'])) {
    $this->data['config_con1'] = $this->request->post['config_con1'];
    } else {
    $this->data['config_con1'] = $this->config->get('config_con1');
    }
     
    if (isset($this->request->post['config_con2'])) {
    $this->data['config_con2'] = $this->request->post['config_con2'];
    } else {
    $this->data['config_con2'] = $this->config->get('config_con2');
    }
     
    if (isset($this->request->post['config_con3'])) {
    $this->data['config_con3'] = $this->request->post['config_con3'];
    } else {
    $this->data['config_con3'] = $this->config->get('config_con3');
    }
     
    if (isset($this->request->post['config_headico1'])) {
    $this->data['config_headico1'] = $this->request->post['config_headico1'];
    } else {
    $this->data['config_headico1'] = $this->config->get('config_headico1');
    }
     
    if (isset($this->request->post['config_headico2'])) {
    $this->data['config_headico2'] = $this->request->post['config_headico2'];
    } else {
    $this->data['config_headico2'] = $this->config->get('config_headico2');
    }
     
    if (isset($this->request->post['config_headico3'])) {
    $this->data['config_headico3'] = $this->request->post['config_headico3'];
    } else {
    $this->data['config_headico3'] = $this->config->get('config_headico3');
    }
    


    Идем по пути /catalog/controller/common/header.php

    после строки

    Код:
    $this->data['text_home'] = $this->language->get('text_home');
    
    вставляем

    Код:
    $this->data['marg_left'] = $this->config->get('config_marg_left');
    $this->data['marg_top'] = $this->config->get('config_marg_top');
    $this->data['con1'] = $this->config->get('config_con1');
    $this->data['con2'] = $this->config->get('config_con2');
    $this->data['con3'] = $this->config->get('config_con3');
    $this->data['headico1'] = $this->config->get('config_headico1');
    $this->data['headico2'] = $this->config->get('config_headico2');
    $this->data['headico3'] = $this->config->get('config_headico3');
    

    Открываем файл /catalog/view/theme/greentea/template/header.tpl

    после

    Код:
    <div id="header">
    
    вставляем

    Код:
    div id="headcontacts" style="position: absolute;top:<?php echo $marg_top; ?>px;left: <?php echo $marg_left; ?>px;">
    <div class="con" style="background: url('/image/contacts/<?php echo $headico1; ?>') no-repeat;"><?php echo $con1; ?></div>
    <div class="con" style="background: url('/image/contacts/<?php echo $headico2; ?>') no-repeat;"><?php echo $con2; ?></div>
    <div class="con" style="background: url('/image/contacts/<?php echo $headico3; ?>') no-repeat;"><?php echo $con3; ?></div>
    </div>
    
    Редактируем стили:

    добавляем в /catalog/view/theme/default/stylesheet/stylesheet.css

    Код:
    #headcontacts {
    font-size: 12px;
    color: #fff;text-decoration: none;
    }
    .con {
    padding-left:25px;
    height: 18px;
    }
    

    Все!!! Модификация готова!!
    [​IMG]
    Теперь переходим в адмику система > настройка > название вашего магазина > изменить и вписываем в строки Контакт-1,Контакт-2,Контакт-3 нужные данные.
    Справа от контакта в поле иконка вбиваем название иконки которая лежит в папке image/contacts/ - по умолчанию уже доступны 2 иконки icq.png и phone.png. из архива contacts.zip
    Можете добавить свои иконки в формате 16x16 px gif,png,jpg и т.д.


    Надеюсь кому-то поможет. В следующий раз опишу модификацию мини-корзины, и как сделать красивые русские урлы без задвоений.
     
    zimzya, mrxvinner, Постер и 3 другим нравится это.
  4. Ping

    Ping PingWin always win

    Регистрация:
    29 окт 2012
    Сообщения:
    445
    Симпатии:
    302
    Ссылка на contacts.zip не работает. Можно перезалить ?
     
  5. yuzi

    yuzi

    Регистрация:
    5 янв 2013
    Сообщения:
    133
    Симпатии:
    71
    Автопубликация отзывов:

    По умолчанию, в движке Opencart включено модерирование отзывов, которые оставляют покупатели продуктам. Т.е., нужно зайти в панель администрирования, далее в "Каталог-Статьи", где будет список еще не проверенных отзывов. Затем заходим в каждый отзыв, и либо одобряем (включаем) его, либо не одобряем (не включаем).
    В некоторых случаях это поведение нужно изменить, включив автопубликацию отзывов.
    Открываем файл: catalog\model\catalog\review.php
    Заменяем:
    Код:
    public function addReview($product_id, $data) {
    		$this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" .
    			$this->db->escape($data['name']) .
    			"', customer_id = '" . (int)$this->customer->getId() .
    			"', product_id = '" . (int)$product_id .
    			"', text = '" . $this->db->escape($data['text']) .
    			"', rating = '" . (int)$data['rating'] .
    			"', date_added = NOW()");
    	}
    НА:
    Код:
    public function addReview($product_id, $data) {
    	$this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" .
    			$this->db->escape($data['name']) .
    			"', customer_id = '" . (int)$this->customer->getId() .
    			"', product_id = '" . (int)$product_id .
    			"', text = '" . $this->db->escape($data['text']) .
    			"', rating = '" . (int)$data['rating'] .
    			"', status = 1, date_added = NOW()");
    	}
    Готово!
     
    Zulus, Totalive, Niko005 и ещё 1-му нравится это.
  6. a.karman

    a.karman

    Регистрация:
    15 мар 2013
    Сообщения:
    5
    Симпатии:
    1
    Как оказалось-работает, но сильно глючит. И к тому же там ничего особенного нету, пара картинок 16*16 под телефон и icq, как на сайте. Путь - image-contacts.
     
  7. buldozer

    buldozer

    Регистрация:
    7 окт 2012
    Сообщения:
    107
    Симпатии:
    44
    чтобы прикрутить символ рубля (ну этот Р с черточкой) попробовал прикрепить произвольный шрифт в котором редактором шрифтов к буквам Р р добавил эту черточку в CSS добавил


    @font-face {
    font-family: 'arial';
    src: url('arial-webfont.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;

    }

    в tpl

    <style type="text/css"> body{font-family: 'arial';}</style>
    но только вот какая бяка получается все буквы Р р в теге ,body ( менял на тег a) пишутся с черточкой кто что может посоветовать по этому поводу
     
    gavag нравится это.
  8. yuzi

    yuzi

    Регистрация:
    5 янв 2013
    Сообщения:
    133
    Симпатии:
    71
    Прокрутка карусели Opencart по кругу


    .../catalog/view/theme/yourtheme/template/module/carousel.tpl
    В нём после:
    Код:
    vertical: false,

    вставляем:

    Код:
    auto: 3,
     
    wrap: 'circular',
    P.S. Цифра "3" обозначает через сколько секунд будет производиться автоматическая прокрутка.
     
    svi00, Kimal, gavag и ещё 1-му нравится это.
  9. VetalySd

    VetalySd

    Регистрация:
    6 фев 2013
    Сообщения:
    57
    Симпатии:
    25
    Делаем красивую и плавную миникорзину вверху, которая срабатывает при наведении мыши. Делалось для OPENCART 1.5.5.1 Демо http://krazdo.com/

    идем по пути /catalog/view/javascript/common.js

    Находим
    Код:
    $('#cart > .heading a').live('click', function() {
    		$('#cart').addClass('active');
    	   
    		$('#cart').load('index.php?route=module/cart #cart > *');
    	   
    		$('#cart').live('mouseleave', function() {
    			$(this).removeClass('active');
    		});
    	});
    	
    Заменяем на
    Код:
    $("#cart").hover(
    function () {
    $('#cart .content').add("#cart .content").load('index.php?route=module/cart .content > *').stop(true, true).show('slow');$('#cart').addClass('active');
    },
    function () {
    $('#cart .content').stop(true, true).hide('fast');$(this).removeClass('active');
    }
    );
    Кода столько-же - радости больше!!
    Все!!!
     
    comodo, zimzya, Vadiev Dem и 7 другим нравится это.
  10. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    195
    в хедер
    <style type="text/css"> span.rubl {font-family: 'arial';}</style>

    в структуре таблицы oc_currency увеличиваешь тип symbol_right с varchar(12) до varchar(64)

    в настройках валюты правый символ ставишь <span class="rubl">Р</span>
    (кстати есть в инете специальный шрифт с рублем, ввроде ALSRublRegular)

    далее /system/library/currency.php
    строка 20
    'symbol_right' => $result['symbol_right'],
    переделываешь её в 'symbol_right' => html_entity_decode($result['symbol_right']),

    готово
     
    travlarnor, gavag и buldozer нравится это.
  11. Florenco

    Florenco

    Регистрация:
    3 мар 2013
    Сообщения:
    220
    Симпатии:
    102
    Исправляем баг в IE с кнопкой "Купить" на странице товара для версий 1.5.2-1.5.4

    Баг зафиксирован в IE8, возможно и в других версиях он имеет место быть, кнопка "Купить" не работает.
    До версии 1.5.2 скрипт fancybox размещался в подвале, начиная с 1.5.2 colorbox размещён в product.tpl и похоже вызывает конфликт с другими скриптами.

    Решение:
    В файле catalog/view/theme/ТЕМА/template/product/product.tpl

    удалить:
    Код:
    <script type="text/javascript"><!--
    $('.colorbox').colorbox({
    overlayClose: true,
    opacity: 0.5
    });
    //--></script>
    в файле catalog/view/theme/ТЕМА/template/common/footer.tpl

    перед:
    Код:
    </body></html>
    добавить:
    Код:
    <script type="text/javascript"><!--
    $('.colorbox').colorbox({
    overlayClose: true,
    opacity: 0.5
    });
    //--></script>
     
    gavag нравится это.
  12. Luckas

    Luckas

    Регистрация:
    21 ноя 2012
    Сообщения:
    233
    Симпатии:
    59
    Автоматическое заполнение meta keywords для улучшения SEO
    В результате у нас будет что-то вроде:
    <head>
    <title>122-02 Модерн</title>
    <base href="http://ocstore:8888/" />
    <meta name="keywords" content="122-02,Модерн,122-02 Модерн" />

    Не идеал, но вроде бы лучше, чем ничего. В то же время вручную описать эти поля никто не мешает, и в случае их заполненности автоматика не вмешивается. Делать автозаполнение для "meta description" не рекомендуется, потому что одинаковое название и описание не приветствуется. Но кому хочется - могут дописать if( empty($this->data['description']) ) $this->data['description'] = $this->data['title'];

    Для версий Opencart 1.5.x, включая 1.5.1.3; ocStore 1.0.1.

    Добавляем в /catalog/controller/common/header.php:
    ...
    $this->data['description'] = $this->document->getDescription();
    $this->data['keywords'] = $this->document->getKeywords();
    $this->data['links'] = $this->document->getLinks();
    $this->data['styles'] = $this->document->getStyles();
    $this->data['scripts'] = $this->document->getScripts();
    $this->data['lang'] = $this->language->get('code');
    $this->data['direction'] = $this->language->get('direction');
    $this->data['google_analytics'] = html_entity_decode($this->config->get('config_google_analytics'), ENT_QUOTES, 'UTF-8');

    /* SEO автоматическое заполнение meta-keywords */
    // If keywords and description not set - use title here too
    if( empty($this->data['keywords']) )
    {
    $words = explode(' ', $this->data['title']);
    $this->data['keywords'] = implode(',', $words) . ',' . $this->data['title'];
    }
    /* SEO автоматическое заполнение meta-keywords */
    ...
     
    vdevi, Totalive, Drazor и ещё 1-му нравится это.
  13. Florenco

    Florenco

    Регистрация:
    3 мар 2013
    Сообщения:
    220
    Симпатии:
    102
    Убираем блок Метки на странице товара, если они не заполнены для версии 1.5.4

    catalog/controller/product/product.php

    заменить:
    Код:
    foreach ($tags as $tag) {
    				$this->data['tags'][] = array(
    					'tag'  => trim($tag),
    					'href' => $this->url->link('product/search', 'filter_tag=' . trim($tag))
    				);
    			}
    
    на:
    Код:
    foreach ($tags as $tag) {
    			if ($tag) {
    				$this->data['tags'][] = array(
    					'tag'  => trim($tag),
    					'href' => $this->url->link('product/search', 'filter_tag=' . trim($tag))
    				);
    				}
    			}
    
     
    vdevi, Totalive, Пумпоша и ещё 1-му нравится это.
  14. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    195
    доработанные категории на базе модуля 1000 категорий (особенно в малом количестве запросов к базе). добавлены [+] и [-] для индикации раскрываемых и раскрытых категорий, они отвечают за раскрытие, а переход на категорию по клику на название , легко изменяются на спрайты подходящие для дизайна. весь css в файле tpl
    демо (пока рабочее) http://virtual-collection.net/index.php?route=product/category&path=18_46поскольку всё это на jquery думаю не сложно будет прикрутить туда slideUp/slideDown
     
    vdevi нравится это.
  15. yuzi

    yuzi

    Регистрация:
    5 янв 2013
    Сообщения:
    133
    Симпатии:
    71
    Цена в title на странице товара
    открываем файл:
    ...\catalog\controller\product\product.php
    ищем
    Код:
    $this->document->setTitle($product_info['name']);
    копируем! и удаляем с этого места
    затем ищем
    Код:
    if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
    $this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
    } else {
    $this->data['price'] = false;
    }
    после этого кода добавляем то что вырезали выше и немного модифицируем:
    Код:
    $this->document->setTitle($product_info['name']." - ".$this->data['price']);
     
    kommunik, Влад Хантер, vdevi и 3 другим нравится это.
  16. Krasovskiy

    Krasovskiy

    Регистрация:
    22 фев 2013
    Сообщения:
    81
    Симпатии:
    79
    И еще может кому интересно. В админке поле Модель делаем необязательным для заполнения.


    Редактировать файл /admin/controller/catalog/product.php найти строку вида:

    php code:
    private function validateForm() {
    if (!$this->user->hasPermission(‘modify’, ’catalog/product’)) {
    $this->error['warning'] = $this->language->get(‘error_permission’);
    }
    foreach ($this->request->post['product_description'] as $language_id => $value) {
    if ((utf8_strlen($value['name']) < 1) || (utf8_strlen($value['name']) > 255)) {
    $this->error['name'][$language_id] = $this->language->get(‘error_name’);
    }
    }
    if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {
    $this->error['model'] = $this->language->get(‘error_model’);
    }
    if ($this->error && !isset($this->error['warning'])) {
    $this->error['warning'] = $this->language->get(‘error_warning’);
    }
    и заменить на:

    php code:
    private function validateForm() {
    if (!$this->user->hasPermission(‘modify’, ’catalog/product’)) {
    $this->error['warning'] = $this->language->get(‘error_permission’);
    }
    foreach ($this->request->post['product_description'] as $language_id => $value) {
    if ((utf8_strlen($value['name']) < 1) || (utf8_strlen($value['name']) > 255)) {
    $this->error['name'][$language_id] = $this->language->get(‘error_name’);
    }
    }
    /*if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {
    $this->error['model'] = $this->language->get(‘error_model’);
    }*/
    if ($this->error && !isset($this->error['warning'])) {
    $this->error['warning'] = $this->language->get(‘error_warning’);
    }
     
    vdevi, Totalive, bosten и ещё 1-му нравится это.
  17. starlin

    starlin

    Регистрация:
    8 фев 2013
    Сообщения:
    4
    Симпатии:
    2
    Добавил дополнительное описание к категориям
    (в основе доп поле к товару)
    1.5.4.1 VQmod
    HTML:
    <modification>
    	<id>category_short_description</id>
    	<version>1.0</version>
    	<vqmver>1.1.1</vqmver>
    	<author>starlin</author>
    	<!-- back -->
     
    	<file name="admin/controller/catalog/category.php">
    		<operation>
    			<search position="after" offset="7"><![CDATA[
    				  public function index() {
    			]]></search>
    			<add><![CDATA[
    				$query = $this->db->query("DESC " . DB_PREFIX . "category_description short_desc");
    				if (!$query->num_rows) {
    					$this->db->query("ALTER TABLE `" . DB_PREFIX . "category_description` ADD `short_desc` text COLLATE utf8_bin NOT NULL");
    				}
    			]]></add>
    		</operation>
    	</file>
     
    	<file name="admin/model/catalog/category.php">
    		<operation>
    			<search position="replace" offset="2"><![CDATA[
    			foreach ($data['category_description'] as $language_id => $value) {
    			]]>
    			</search>
    			<add><![CDATA[
    			foreach ($data['category_description'] as $language_id => $value) {
    				$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', short_desc = '" . $this->db->escape($value['short_desc']) . "'");
    			}
    			]]></add>
    		</operation>
    	</file>
     
    	<file name="admin/model/catalog/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    				'description'	  => $result['description']
    			]]>
    			</search>
    			<add><![CDATA[
    				, 'short_desc' => $result['short_desc']
    			]]></add>
    		</operation>
    	</file>
     
     
    	<file name="admin/controller/catalog/category.php">
    		<operation>
    			<search position="after" offset="1"><![CDATA[
    			$this->data['category_description'] = array();
    			]]>
    			</search>
    			<add><![CDATA[
    			if (isset($this->error['short_desc'])) {
    			$this->data['short_desc'] = $this->error['short_desc'];
    		} else {
    			$this->data['short_desc'] = array();
    		}
    			]]></add>
     
    		</operation>
    	</file>
     
    	<file name="admin/controller/catalog/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$this->data['entry_description'] = $this->language->get('entry_description');
    			]]>
    			</search>
    			<add><![CDATA[
    			$this->data['entry_short_desc'] = $this->language->get('entry_short_desc');
    			]]></add>
    		</operation>
    	</file>
     
    	<file name="admin/language/english/catalog/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$_['entry_description']	  = 'Description:';
    			]]>
    			</search>
    			<add><![CDATA[
    			$_['entry_short_desc']	  = 'Additional description:';
    			]]></add>
    		</operation>
    	</file>
     
    	<file name="admin/language/russian/catalog/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$_['entry_description']	  = 'Описание:';
    			]]>
    			</search>
    			<add><![CDATA[
    			$_['entry_short_desc']	  = 'Additional description:';
    			]]></add>
    		</operation>
    	</file>
    	 
    	<file name="admin/view/template/catalog/category_form.tpl">
    		<operation>
    			<search position="after" offset="2"><![CDATA[
    			<td><?php echo $entry_description; ?></td>]]>
    			</search>
    			<add><![CDATA[
    				<tr>		 
    				<td><?php echo $entry_short_desc; ?></td>
    				<td><textarea name="category_description[<?php echo $language['language_id']; ?>][short_desc]" id="short_desc<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['short_desc'] : ''; ?></textarea></td>
    				</tr>
    				]]></add>
     
    		</operation>
    	</file>
     
    	<file name="admin/view/template/catalog/category_form.tpl">
    		<operation>
    			<search position="after" offset="3"><![CDATA[
    			filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
    			]]></search>
    			<add><![CDATA[		
    				<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script>
    				<script type="text/javascript"><!--
    				<?php foreach ($languages as $language) { ?>
    				CKEDITOR.replace('short_desc<?php echo $language['language_id']; ?>', {
    				filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    				filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    				filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    				filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    				filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    				filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
    				});
    				<?php } ?>
    				//--></script>
    				]]></add>
    		</operation>
    	</file>
     
     
    	<file name="catalog/model/catalog/category.php">
    		<operation>
    			<search position="before"><![CDATA[
    			  public function getCategory($category_id) {			]]></search>
    			<add><![CDATA[
    public function getShortDesc($category_id) {
    		$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "short_desc cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
     
    		if ($query->num_rows) {
    			return array(
    				'short_desc'	  => $query->row['short_desc']
    				);
    		} else {
    			return false;
    		}
    	}			]]></add>
    		</operation>
    	</file>
     
    	<file name="catalog/controller/product/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$this->data['heading_title'] = $category_info['name'];
    			]]></search>
    			<add><![CDATA[
    			$this->data['short_desc'] = $category_info['short_desc'];
    			]]></add>
    		</operation>
    	</file>
     
    	<file name="catalog/controller/product/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
    			]]></search>
    			<add><![CDATA[
    			$this->data['short_desc'] = html_entity_decode($category_info['short_desc'], ENT_QUOTES, 'UTF-8');
    			]]></add>
    		</operation>
    	</file>
    	<!-- front -->
    	<file name="catalog/controller/product/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$this->data['text_limit'] = $this->language->get('text_limit');
    			]]></search>
    			<add><![CDATA[
    			$this->data['text_short_desc'] = $this->language->get('text_short_desc');
    			]]></add>
    		</operation>
    	</file>
     
     
    	<file name="catalog/language/english/product/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$_['text_error']		= 'Product not found!';
    			]]></search>
    			<add><![CDATA[
    			$_['text_short_desc']	= 'Additional description';
    			]]></add>
    		</operation>
    	</file>
     
    	<file name="catalog/language/russian/product/category.php">
    		<operation>
    			<search position="after"><![CDATA[
    			$_['text_error']		= 'Категория не найдена!';
    			]]></search>
    			<add><![CDATA[
    			$_['text_short_desc']	= 'Additional description';
    			]]></add>
    		</operation>
    	</file>
    	 
    	<file name="catalog/view/theme/default/template/product/category.tpl">
    		<operation>
    			<search position="before"><![CDATA[
    			<?php echo $content_bottom; ?>
    			]]></search>
    			<add><![CDATA[
    			<?php if ($short_desc) { ?>
    			<span><?php echo $text_short_desc; ?></span> <?php echo $short_desc; ?></a><br />
    			<?php } ?>
    			]]></add>
    		</operation>
    	</file>
    </modification>
     
    vdevi и kama812 нравится это.
  18. Krasovskiy

    Krasovskiy

    Регистрация:
    22 фев 2013
    Сообщения:
    81
    Симпатии:
    79
    Как легко вводить атрибуты товара

    [​IMG]
    при редактировании или добавлении продукта при вводе в поле атрибута точки “.” появится список всех атрибутов
    1. Открыть файл admin/controller/catalog/attribute.php
    Найти в сконце ± 435 строке следующий код:
    Код:
    $sort_order = array();
    foreach ($json as $key => $value) {
    $sort_order[$key] = $value['name'];
    }
    array_multisort($sort_order, SORT_ASC, $json);
    Если у вас присутствует данный код, то переходим к пункту 2:
    Если код отсутствует, тогда его нужно добавить выше этой строки:
    Код:
    $this->load->library(‘json’);
    2. Открыть файл admin/model/catalog/attribute.php
    В ±37 строке примерный код:
    Код:
    if (isset($data['filter_name']) && !is_null($data['filter_name'])) {
    $sql .= ” AND LCASE(ad.name) LIKE ‘” . $this->db->escape(mb_strtolower($data['filter_name'], ‘UTF-8′)) . “%’”;
    }
    или может такой (ocStore 1.5.4.1):
    Код:
    if (!empty($data['filter_name'])) {
    $sql .= " AND LCASE(ad.name) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
    }
    заменить на:
    Код:
    if (isset($data['filter_name']) && !is_null($data['filter_name'])) {
    if( $data['filter_name'] == ‘.’ )
    $sql .= ” AND LCASE(ad.name) LIKE ‘%’”;
    else
    $sql .= ” AND LCASE(ad.name) LIKE ‘%” . $this->db->escape(mb_strtolower($data['filter_name'], ‘UTF-8′)) . “%’”;
    }
    Bcе!:coffee:
     
    vdevi и Luxy нравится это.
  19. Alexxcha

    Alexxcha

    Регистрация:
    21 ноя 2012
    Сообщения:
    130
    Симпатии:
    36
    Нередко на форуме можно найти вопросы по стикерам для товаров. Как правило требуются стикеры на товары которые продаются со скидкой по акции, сам перепробовал множество модулей - но ничего подходящего конкретно мне так и не нашел, поэтому поковырявшись в одном из шаблонов для магазина обнаружил довольно простое и симпатичное решение проблемы стикеров для товаров по акции.
    Выкладываю на всеобщее обозрение:

    1. Как правило стикеры необходимо отображать в трех видах: в категориях, в витрине на главной и в рекомендуемых на странице товара.
    2. Ищем и открываем файл stylesheet.css (как правило расположен в папке stylesheet шаблона)
    3. Добавляем следующий код:
    Код:
    #content .box-product .special_promo {
    	position: absolute;
    	top: -4px;
    	right: -4px;
    	width: 60px;
    	height: 60px;
    	background: url('../image/promo.png') left top no-repeat;
    	z-index:1000;
    4. В папку Image шаблона закидываем файл: [​IMG]
    5. В папке /template/product ищем файлы: category.tpl, product.tpl и прочих где необходимо отображение стикера ищем приблизительно такой код:
    Код:
    <a href="<?php echo $product['href']; ?>" class="image-link">
    	 <div class="image">
    			   <?php if ($product['thumb']) { ?>
    			   <img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" />
    			   <?php } else { ?>
    			   <div class="no-image"></div>
    			   <?php } ?>
    	 </div>
    </a>
    
    И между:
    Код:
    <div class="image">
    <?php if ($product['thumb']) { ?>
    вставляем:
    Код:
    <?php if ($product['special']) { ?>
    <?php echo '<div class="special_promo"></div>'; ?>
    <?php } ?>
    
    У каждого шаблоны магазинов свои, а следовательно предложенный мною вариант это лишь направление в сторону которого можно двигаться.
    Из плюсов данного решения - магазин не загружается лишними модулями :Smile:
    Из минусов - выделить можно лишь одним стикером.

    Вот как это смотрится у меня в магазине:
    Вид главной страницы:
    [​IMG]


    Вид категорий:
    [​IMG]


    Вид на вкладке с самим товаром:
    [​IMG]
     
    Krasovskiy нравится это.
  20. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    890
    Зачем ети танцы с бубнами если можно просто без каких либо изменений вместо точки ввести знак % (процента)
    И все
     
    OnL1ne, x-guest, nick885 и 6 другим нравится это.