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

OpenCart 2.0 - Available Now


RGB

  

98 голосів

You do not have permission to vote in this poll, or see the poll results. Будь ласка, увійдіть або зареєструйтеся для голосування в опитуванні.

Recommended Posts

 

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

 

нужно просто потратить немного времени и сделать 1 раз простую базовую тему без бутстрапа (что-то типа друпаловкой zen) после чего все темы делать на основе этой базовой темы.

Надіслати
Поділитися на інших сайтах

Ну вставлю свои пару копеек, так как частенько использую "вытяжки" данных при "пост" передачах в аяксе именно по селекторам... то ранее хоть понимание было какое то типа: 

data: $('.options input[type=\'hidden\'], .options #option-value-'+product_option_value_id),

а теперь получается, что как то в голове записывать данные типа:

data: $('.column-sm-6 input[type=\'hidden\'], .column-sm-6 #option-value-'+product_option_value_id),

но это такое, никто ведь id (#) не отменял... главное что бы экология в самом коде была, а шаблоны верстать думаю что и без бутстрапа можно, ведь тот факт, что он в дефолте прописан, совсем не значит, что так и должно быть в проектировании ИМ...

 

Если я правильно понял, то в этом примере для передачи массива name="option" вы используете селектор родительского класса. Зачем? Почему? Это ошибка в логике скрипта, я считаю. Уж если хочется проверить родителя, то это должен быть .product-info, который по сути был зарезервирован для карточки товара. Если bootstrap помешает допускать эту ошибку, то это только в плюс. Только для 2.0 это уже #product т.е. это уже явное резервирование.

Надіслати
Поділитися на інших сайтах

Почти все верно

Но контейнер данных должен лежать в форме.

На странице может быть несколько форм, и элементы с одинаковым именем, а этого нет и в 1.5

 

Но то таке...

Надіслати
Поділитися на інших сайтах

Если я правильно понял, то в этом примере для передачи массива name="option" вы используете селектор родительского класса. Зачем? Почему? Это ошибка в логике скрипта, я считаю. Уж если хочется проверить родителя, то это должен быть .product-info, который по сути был зарезервирован для карточки товара. Если bootstrap помешает допускать эту ошибку, то это только в плюс. Только для 2.0 это уже #product т.е. это уже явное резервирование.

не, я бутстрап пока не юзаю (просто в будущее глянул), по поводу скриптуса, то тут можно глянуть логику что и зачем я так беру..

Надіслати
Поділитися на інших сайтах

Вижу, что все супер :) Непонятно только чем тут bootstrap помешает, если это полностью свой тег options. Зачем column-sm-6?

 

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

Надіслати
Поділитися на інших сайтах

Вижу, что все супер :) Непонятно только чем тут bootstrap помешает, если это полностью свой тег options. Зачем column-sm-6?

 

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

Та я так предположил просто, что сегодня я использую класс для селектора option а завтра под 2.0 надо уже будет как то выкручиваться... но это не аргумент во вред или пользу bootstrap и вообще, это не моя кухня, я по коду больше...

Надіслати
Поділитися на інших сайтах

честно говоря я вообще проблем не вижу :-) сплошные плюсы :-) ну и как вы понимаете если я смог сделать так https://opencartforum.com/files/file/1616-bootstrap-ocshop-template-v-20/ то сделать наоборот тоже не составит обратного труда. и я вам говорил еще пол года назад адаптируйте свои модули под шаблон вам это в 2.0 пригодится но дальше вы сами знаете

Надіслати
Поділитися на інших сайтах

OldAine: про женскую прическу - супер! прям 15 из десяти =)

RGB: прикрути голосовалку к топику ;) А то здесь, как я погляжу, в основном бутстрап обсуждают, а не 2.0  :-D

Надіслати
Поділитися на інших сайтах

Пробовал сегодня перенести один модуль на 2.0.0.0 АДЪ ))
1. нужно полностью переделывать админку модуля под бутстрап, там где раньше можно было написать что-то типа:

<?php echo $field; ?>: <input type="text" name="field" value="" /> <input type="text" name="field2" value="" />

теперь нужно писать (и примерно так же для каждого поля в админке!):

<div class="form-group">
  <label class="col-sm-2 control-label" for="input-field"><span data-toggle="tooltip" title="<?php echo $help_field; ?>"><?php echo $field; ?></span></label>
  <div class="col-sm-10">
    <div class="row">
      <div class="col-sm-6">
        <input type="text" name="field" value="" id="input-field" class="form-control">
      </div>
      <div class="col-sm-6">
        <input type="text" name="field2" value="" id="input-field2" class="form-control">
      </div>
    </div>
  </div>
</div> 

2.
вместо

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

нужно

$data['foo'] = $foo;

3.
вместо

$this->template = 'module/module.tpl';

нужно

$this->response->setOutput($this->load->view('module/module', $data));

4.
вместо

$this->children = array(
  'common/header',
  'common/footer'
);

нужно (появилась левая колонка в админке и теперь можно загружать через load контроллеры)

$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');

5.
вместо

$this->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));

нужно

$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));

6. поле "статус" для модулей (enable, disable) оно теперь обязательное? Если так то почему бы не вынести его за модуль, как кнопку "установить" чтобы не прописывать это в каждом модуле.

7. Схемы для модулей. Они теперь отдельно. Нужно заходить в каждую схему и добавлять вручную модули. Чтобы модуль появился в списке нужно чтобы он был установлен и в него была настройка "module_name_module" с настройками модулей. Если нету то модуль не появится и нужно эту настройку обязательно добавить.

8. jquery-ui, его теперь нету в  движке. Мне нужен был ui-autocomplete, вместо него какой-то самописный велосипед в common.js.

это то с чем пока столкнулся. 

 

ПС. нет, в общем все понравилось, просто много мелких изменений, которые делают процесс переноса модулей очень трудоемким. 

Змінено користувачем sv2109
  • +1 5
Надіслати
Поділитися на інших сайтах

По поводу autocomplete уже было несколько обсуждений. Да, паршиво.

 

Спасибо за инфу. По пунктам 1-4: теперь ОС ещё больше на CodeIgniter похож.

Надіслати
Поділитися на інших сайтах

Присоединяюсь к тем, кто справедливо удивляется критике bootstrap. Единственное что в нем плохо - это что придется менять везде стандартную структуру, но из этого в будущем может следовать его главное преимущество - унификация стилей и внешнего вида модулей, и особенно их верстки хотя бы в пределах стандартного шаблона, а поменять стандартный внешний вид bootstrap на что угодно - не вижу в этом никаких серьезных проблем, ведь никто не заставляет использовать стандартную синюю схему или стандартные компоненты, все в нем можно кастомизировать и разукрашивать через стили как душе угодно, лишь бы tpl-ки оставались нетронутыми :)

 

RGB: прикрути голосовалку к топику ;) А то здесь, как я погляжу, в основном бутстрап обсуждают, а не 2.0  :-D

done :)

 

...

ПС. нет, в общем все понравилось, просто много мелких изменений, которые делают процесс переноса модулей очень трудоемким. 

Вот вам спасибо за такой мануал, хотя в рассылке ОС вроде обещалось нечто подобное вроде инструкции по миграции модулей

Надіслати
Поділитися на інших сайтах

стоп, стоп, не паниковать

$data['foo'] = $foo;

Оставлять как было

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

А тут

 

$this->response->setOutput($this->load->view('module/module', $this->data));

Надіслати
Поділитися на інших сайтах

Пробовал сегодня перенести один модуль на 2.0.0.0 АДЪ ))

2.

вместо

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

нужно

$data['foo'] = $foo;

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

В классе

protected  $data;

 

перед выводом

$data = $this->data;

unset($this->data);

  • +1 1
Надіслати
Поділитися на інших сайтах

Ну так это я уже предложил,

 

вот толкько

 

protected  $data;

или

private $data;

Лично я склонен к private т.к  эта переменная должна быть видна только в этом классе.

И не понадобится делать unset.

 

С другой стороны, это интересно если используемый класс в дальнейшем будет чьим-то родителем.

Но... много видели?

Надіслати
Поділитися на інших сайтах

В новой версии модификаторы - это укороченный вариант vQmod-а, тут он называется: OCMOD, имеет те же инструкции по XML файлу что и vQmod, кроме:
ignoreif, log
а именно:
Replace, Before, After, Regex, Offset, Limit, Index
В состав для аплоадера (админка) каталога в сжатом (.zip предположительно) виде, рекомендовано вносить 3-ри файла:

  • install.sql
  • install.php
  • install.xml

( Но можно и сам XML подгружать)

 

Только почему то стоит жосткая проверка на окончание загружаемых файлов:

if (
   substr($this->request->files['file']['name'], -10) != '.ocmod.zip' 
&& substr($this->request->files['file']['name'], -10) != '.vqmod.zip' 
&& substr($this->request->files['file']['name'], -10) != '.ocmod.xml' 
&& substr($this->request->files['file']['name'], -10) != '.vqmod.xml'
   ) {
	$json['error'] = $this->language->get('error_filetype');
    }

Так что получается названия загружаемых файлов должны иметь одно из таких окончаний:

.ocmod.zip

.vqmod.zip

.ocmod.xml

.vqmod.xml

 

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

upload_mod_name //Каталог
-->install.sql  //Файл запросов к базе (на забыть проверить окончание строки на [;]
-->install.php  //Скрипт выполнения
-->install.xml  //Файл с инструкциями для модификации

Сам же пример XML файла должен выглядеть примерно так:

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Modification Default</name>
    <version>1.0</version>
    <author>OpenCart Ltd</author>
    <link>http://www.opencart.com</link>
    <file path="catalog/controller/common/home.php">
        <operation>
            <search><![CDATA[
            $data['column_left'] = $this->load->controller('common/column_left');
            ]]></search>
            <add position="replace"><![CDATA[
            test123
            ]]></add>
        </operation>
    </file>  
</modification>

Так же есть возможность использовать для одинаковых инструкций при модификации нескольких файлов, делать их декларирование в одной строке:

<file path="system/{engine,library}/{action,loader,config,language}*.php">

Более подробно по синтаксису описано тут...

 

P.S. Прикрепил к загрузке нового vQmod-а для 2.0

opencart-2-0-0-x-vqmod-2-4-1-1.zip

  • +1 2
Надіслати
Поділитися на інших сайтах

Появилась проверка на дубли seo-url'ов.

https://github.com/opencart/opencart/commit/69d6252f4157faf207e3db0504de20b34eab58ef

Надіслати
Поділитися на інших сайтах

Я не понимаю, почему все ноют из-за бутстрапа. Подумаешь, сетку для сайта будет удобнее делать, и упрощается разработка резиновых/адаптивных макетов.
 
А вот то, что остались конструкции типа:

$data['column_name'] = $this->language->get('column_name');
$data['column_model'] = $this->language->get('column_model');
$data['column_quantity'] = $this->language->get('column_quantity');
$data['column_price'] = $this->language->get('column_price');
if ($this->config->get('config_cart_weight')) {
  $data['weight'] = $this->weight->format($this->cart->getWeight(), $this->config->get('config_weight_class_id'), $this->language->get('decimal_point'), $this->language->get('thousand_point'));
} else {
  $data['weight'] = '';
}

if ($this->config->get('config_customer_price') && !$this->customer->isLogged()) {
  $data['attention'] = sprintf($this->language->get('text_login'), $this->url->link('account/login'), $this->url->link('account/register'));
} else {
  $data['attention'] = '';
}

if (isset($this->session->data['success'])) {
  $data['success'] = $this->session->data['success'];
} else {
  $data['success'] = '';
}

Вот это действительно огорчает. Я надеялся, что во второй версии от этого уйдут.

Ну и ocmod этот непонятный. Лучше бы добавили события, обработчики. Это же кошмарно, писать модули с xml-файлами, в которых будут инструкции, в какой php файл и что добавить. 

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

По OCMOD:

на wiki документация устаревшая. Работа с атрибутами ocmod на Opencart 2.0.0.1b

 

<operation>
    error = 'skip'  - пропускает текущую операцию если позиция не найдена
    error = 'abort' - останавливает выполнение мода если позиция не найдена
            В обоих случаях событие записывается в лог модификаторов
</operation>
<search>
    trim  - (true|flase) $search = trim($search)
    index - позволяет задать число искомой строки для поиска. Аналогично index в vqmod, за исключением: в vqmod - index="2" вернет 2-е совпадение в файле, в ocmod index="2" вернет 3-е совпадение в файле. Можно перечислить через запятую нужные варианты: index="1,3,7". (не используй без нужды, в Opencart v2.0.0.1b поведение не прогнозируемое). Есть нюанс: в Opencart v2.0.0.1b если index="0" - будет возвращать все совпадения из <search></search>. Если нужно найти только первое совпадение - используй index="0,40", где 40 - несуществующее к-во совпадений.
</search
<add>
    trim     - (true|flase) $add = trim($add)
    position - (before|after|replace) Поведение аналогично position в vqmod. Направление вставки текста (before|after) относительно искомой строки  или замены текста в случае repalce.
    offset   - аналогично offset в vqmod. Смещение в строках относительно position. Как и в vqmod: 0 - первая строка
</add>
 

 

В релизе Opencart v2.0.0.0 атрибуты работают по совершенно другой логике.  Атрибуты index и trim отсутствуют. Если интересно - могу рассказать.

Надіслати
Поділитися на інших сайтах

Сам же пример XML файла должен выглядеть примерно так:

В Opencart 2.0.0.1b Даниэль изменил структуру. Теперь она выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Modification Default</name>
    <code>modification_id</code>
    <version>1.0</version>
    <author>OpenCart Ltd</author>
    <link>http://www.opencart.com</link>
    <file path="catalog/controller/common/home.php">
        <operation>
            <search><![CDATA[
            $data['column_left'] = $this->load->controller('common/column_left');
            ]]></search>
            <add position="replace"><![CDATA[
            test123
            ]]></add>
        </operation>
    </file>  
</modification>

Добавился атрибут code. Он должен быть уникальным среди всех ocmod-дополнений.

Надіслати
Поділитися на інших сайтах

  • 2 months later...
  • 2 months later...

Я чет понять не могу...

А куда девается файл xml-инструкции (blablabla.ocmod.xml) после загрузки через установщик дополнений?

 

Результат инструкции в папке system/modification, это понятно...

А сама инструкция что, самоликвидируется что ли?

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

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

Important Information

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