Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

liquidcore

Новачок
  
  • Публікації

    6
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем liquidcore

  1. Проще, но тогда неправильное использование поля directory в настройке шаблона приведет к той же ошибке. Если дизайнер захочет изменить название папки шаблона - он будет обязан менять и контролы. Это не согласуется с концепцией движка.

  2. Собственно решил таки проапгрейдить магазины до последнего движка. Начал разбираться, что поменялось с архитектуры 1.4.9 - и погряз на несколько часов, попутно выполняя несколько типичных и нетипичных задач, а именно: сменить все названия корневых папок (для исключения взлома типичными скриптами), создать модифицированный архив для чистой установки и затем клонировать штатную тему и заняться кастомизацией CSS.

    Первая задача решилась достаточно легко, но пришлось поискать прямые пути в скриптах и временно их изменить ручками, отложив замену на дефайны. А вот вторая заставила меня перерыть весь движок. Огорчением было, что недостаточно скопировать папку с темой - оказалось, что нужно теперь поступать так, как это было с модулями в 1.4.9. Если кому интересно, то подробности под спойлером.

    Spoiler

    По указанным ниже путям лежат соответвующие файлы theme_default.php (.tpl), где необходимо их задублировать, переименовав default на нужное Вам название темы (например newone). Так же необходимо во всех файлах редактором заменить default по аналогии. В итоге получите следующее:

    admin\controller\extension\theme\theme_newone.php
    admin\language\en-gb\extension\theme\theme_newone.php
    admin\language\ru-ru\extension\theme\theme_newone.php
    admin\view\template\extension\theme\theme_newone.tpl
    catalog\view\theme\newone - это копия темы default

     

    Так же Вам потребуется поменять в файлах-шаблонах все найденные жесткие привязки к теме default (например в header.tpl)

     

    Теперь тема отображается в админке - ее стоит можно установить и настроить. Название темы для админки меняется в файлах папки language.

    А теперь суть проблемы, причину которой я долго не мог найти - при смене темы, все настройки меняются верно, а рендерится тема дефолтная. Вот. Ошибка оказалась в хитром (для неведующих, типа меня) месте - в скрипте обработки события по адресу catalog\controller\event\theme.php:

    //На 16 строчке вместо
    $theme = $this->config->get('config_theme');
    //Стоит поставить
    $theme = $this->config->get($this->config->get('config_theme').'_directory');
    //И все становится отлично!

    Прошу внести правки в дистрибутив, если вышеизложенное верно. Спасибо за внимание.

  3. Многие знают, что по умолчанию активация пользовательских аккаунтов производится вручную админом

    Поэтому предлагаю простой и элегантный вариант с минимумом модификации кода магазина

    Работает только при включенной активаций новых пользователей (что логично)

    При регистрации нового пользователя высылается письмо, содержащее логин, пароль, ссылку активации учетной записи

    Пользователь должен перейти по ссылке в письме - при переходе он попадает на страницу "Активация учетной записи", где при успешной активации будет отображено "Активация успешна"

    Механизм очень простой - скрипт activate.php принимает base64 параметр и активирует запись по данным указанным в значении параметра.

    Замечания: встроена очень простая защита от генерации base64 значения и подбора - ссылка на активацию содержит данные о customer_id - индентификатор, который знает только генератор ссылок (я так думаю).

    Текущего функционала хватает для отсева ботов и удобного пользования покупателями.

    в архиве 7 файлов

    catalog-controller-account-activate.php - новый файл

    catalog-controller-account-create.php - единственный измененный скрипт - заменить одну строчку четырьмя

    catalog-language-russian-account-activate.php - новый файл

    catalog-language-russian-account-success.php - модификация текста

    catalog-language-russian-mail-account_create.php - модификация текста

    install.txt - описание установки

    З.Ы.: обновил итоговый вариант

    использование - очень простое

    версия - у меня пишет ocStore 0.2.0

    а реальная по-моему 0.2.2

    удачи :)

    MOD Активация по email + логин и пароль.zip

  4. Задача: иметь возможность фильтровать товар в каталоге по 2м измерениям, оба измерения - часть наименования (мл, г)

    Реализация:

    >catalog/model/catalog/product.php

    код до замены и после, вставки отмечены красным:

    public function getProductsByCategoryId($category_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20, $filter = '') {

    //filter in the end of next string

    $sql = "SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2c.category_id = '" . (int)$category_id . "'".$filter;

    >catalog/controller/product/category.php

    код до замены и после, вставки отмечены красным:

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

    //FILTER

    $filter ='';

    //

    $this->data['filter1'] = ( isset($this->request->get['filter1']) ? $this->request->get['filter1'] : '');

    $this->data['filter2'] = ( isset($this->request->get['filter2']) ? $this->request->get['filter2'] : '');

    $this->data['filter3'] = ( isset($this->request->get['filter3']) ? $this->request->get['filter3'] : '');

    if ($this->data['filter1']){ $filter .= " AND pd.name LIKE '%".$this->data['filter1']."%'"; }

    if ($this->data['filter2']){ $filter .= " AND pd.name LIKE '%".$this->data['filter2']."%'"; }

    if ($this->data['filter3']){ $filter .= " AND pd.name LIKE '%".$this->data['filter3']."%'"; }

    //

    $product_total = sizeof($this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, 0, 99999, $filter));

    //END OF FILTER

    $results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'),$filter);

    и чуть ниже

    //FILTER URL OPTIONS --------

    $url .= '&filter1='.$this->data['filter1'].'&filter2='.$this->data['filter2'].'&filter3='.$this->data['filter3'];

    //---------------------------

    $pagination = new Pagination();

    $pagination->total = $product_total;

    $pagination->page = $page;

    $pagination->limit = $this->config->get('config_catalog_limit');

    $pagination->text = $this->language->get('text_pagination');

    $pagination->url = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . $url . '&page={page}');

    //FILTER URL OPTIONS --------------------

    $this->data['filter_url'] = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . $url);

    $this->data['category_id'] = $category_id;

    //---------------------------------------

    $this->data['pagination'] = $pagination->render();

    ну и наконец шаблон

    >catalog/view/theme/имя.темы/template/product/catalog.tpl

    вставляется в тело <div class="sort"> ... </div> перед списком сортировки

      <?php
      $filters = array();
             // перечисление каталогов, для кого применяется фильтр и собственно структура фильтров
             // обратите внимание, что одинаковые каталоги не должны входить в разные наборы фильтров,
             // т.е. $filters[',1,2,'] вместе с $filters[',1,3,'] - для категории 1 выведет 2хКол-во определенных
             // фильтров, т.е. задублируются, что приведет к ошибке
      $filters[',1,39,40,41,42,43,'] = array (
    	'filter1' => array ('Name' => 'Параметр 1 ', 'Options' => array ('', 'Значение 1','Значение 2') ),
    	'filter2' => array ('Name' => 'Параметр 2 ', 'Options' => array ('', 'Значение 1','Значение 2','Значение 3','Значение 4') ),
    	'filter3' => array ('Name' => '',            'Options' => array () ) );
      
      foreach ($filters as $key => $value){
    	if (!(strpos($key,','.$category_id.',') === false) ) { ?>
    	  
    	<?php if( $value['filter1']['Name'] ){ ?>
    	  <div class="filter_option">
    		<span><?php echo $value['filter1']['Name']; ?></span>
            <select name="filter1" onchange="location = this.value">
              <?php foreach ( $value['filter1']['Options'] as $filter) { ?>
    		  <?php $option = preg_replace('/filter1=[^&]*&/','filter1='.$filter.'&',$filter_url); ?>
              <?php if ($filter1 == $filter) { ?>
    		  <option value="<?php echo $option; ?>" selected="selected"><?php echo $filter; ?></option>
              <?php } else { ?>
              <option value="<?php echo $option; ?>"><?php echo $filter; ?></option>
              <?php } ?>
              <?php } ?>
            </select>
          </div>
    	  <?php } ?>
    	  
    	  <?php if( $value['filter2']['Name'] ){ ?>
    	  <div class="filter_option">
              <span><?php echo 'Содержание никотина '; ?></span>
    		  <select name="filter2" onchange="location = this.value">
              <?php foreach ( $value['filter2']['Options'] as $filter) { ?>
    		  <?php $option = preg_replace('/filter2=[^&]*&/','filter2='.$filter.'&',$filter_url); ?>
    		  <?php if ($filter2 == $filter) { ?>
              <option value="<?php echo $option; ?>" selected="selected"><?php echo $filter; ?></option>
              <?php } else { ?>
              <option value="<?php echo $option; ?>"><?php echo $filter; ?></option>
              <?php } ?>
              <?php } ?>
            </select>
    	  </div>
    	  <?php } ?>
    	  
    	  <?php if( $value['filter3']['Name'] ){ ?>
    	   <div class="filter_option">
              <span><?php echo 'Содержание никотина '; ?></span>
    		  <select name="filter3" onchange="location = this.value">
              <?php foreach ( $value['filter3']['Options'] as $filter) { ?>
    		  <?php $option = preg_replace('/filter3=[^&]*&/','filter3='.$filter.'&',$filter_url); ?>
              <?php if ($filter3 == $filter) { ?>
              <option value="<?php echo $option; ?>" selected="selected"><?php echo $filter; ?></option>
              <?php } else { ?>
              <option value="<?php echo $option; ?>"><?php echo $filter; ?></option>
              <?php } ?>
              <?php } ?>
            </select>
    	  </div>
    	  <?php } ?>
    	 <?php break; } ?>
    	 <?php } ?>
    	  
    	  
        </div>
    

    и немного CSS:

    .filter_option { float: left; margin-top: 7px; margin-left: 20px; }
    

    Сильно не бейте, в php я почти ноль - мог что и пропустить.

    Все три фильтра используются для фильтрации по наименованию.

    В контроллере можно отредактировать на практически любые поля - просто немного изучить sql запрос под кодом фильтра

    В шаблоне можно создать структуру фильтров для любых категорий.

    Надеюсь кому нибудь пригодится :)) Кстати работает на 1.4.9 - на ней собственно и сижу.

    *Updated! Исправлен баг: при изменении параметра номер страницы оставался.

    *Updated! Исправлены ошибки данного поста.

    post-9990-0-56817700-1312721641_thumb.jpg

    • +1 3
  5. Собственно сабж.

    Идея простая, как и ее реализация.

    Появилась необходимость иметь единую базу пользователей для двух магазинов.

    Задание:

    собственные префиксы для таблиц каждого из магазинов, префиксы "com_" для трех таблиц:

    address, customer и customer_group

    Реализация:

    в конфигурационные файлы добавляется еще одно глобальное определение CDB_PREFIX

    в некоторые системные файлы вносятся корректировки префикса

    Пожалуйста поправьте меня, если что-то упустил

    MOD общие пользователи.zip

    • +1 1
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.