Перейти к содержанию
Официальный форум поддержки Simpla

Когда выйдет обновление?


Рекомендуемые сообщения

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

 

Ну если с наследованием классов - то да. Такая проблема будет.

Но в vqmod то нет этого... Там в итоге получится один закешированный файл со всеми внесенными правками который и будет выполнятся...

 

Там ведь суть какая:

Нужные include|require  подменяются на обработчик vqmod.

Далее он читает xml-файлы (модули) в которых прописаны какие файлы и что в них поменять.

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

Если файлы не менялись то он берет уже сформированный.

 

Вот небольшой пример как бы выглядел модуль на добавление поля "field_xx" к sql выборке товара

 

<?xml version="1.0" encoding="UTF-8"?>
<modification>
	<id>product_field_xx</id>
	<version>1</version>
	<vqmver required="true">2.5.0</vqmver>
	<author>yr4ik</author>
	
	<file name="api/Products.php">
		<search position="after">p.name,</search>
		<add>p.field_xx,</add>
	</file>
</modification>

 

 

В итоге данный xml сделает кеш-файл в определенной папке с именем api_Products.php и уже с измененным запросом SELECT.

В результате будет выполнятся не api/Products.php, а api_Products.php.

А api/Products.php останется без изменений

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 166
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Ну если с наследованием классов - то да. Такая проблема будет.

Но в vqmod то нет этого... Там в итоге получится один закешированный файл со всеми внесенными правками который и будет выполнятся...

 

Там ведь суть какая:

Нужные include|require  подменяются на обработчик vqmod.

Далее он читает xml-файлы (модули) в которых прописаны какие файлы и что в них поменять.

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

Если файлы не менялись то он берет уже сформированный.

 

Вот небольшой пример как бы выглядел модуль на добавление поля "field_xx" к sql выборке товара

 

<?xml version="1.0" encoding="UTF-8"?>
<modification>
	<id>product_field_xx</id>
	<version>1</version>
	<vqmver required="true">2.5.0</vqmver>
	<author>yr4ik</author>
	
	<file name="api/Products.php">
		<search position="after">p.name,</search>
		<add>p.field_xx,</add>
	</file>
</modification>

 

 

В итоге данный xml сделает кеш-файл в определенной папке с именем api_Products.php и уже с измененным запросом SELECT.

В результате будет выполнятся не api/Products.php, а api_Products.php.

А api/Products.php останется без изменений

Всё равно не очень понятно - "Он берет нужный файл, вносит в него нужные правки и сохраняет в заданную директорию". А если другой модуль уже внес туда правки?

Ссылка на сообщение
Поделиться на другие сайты

Всё равно не очень понятно - "Он берет нужный файл, вносит в него нужные правки и сохраняет в заданную директорию". А если другой модуль уже внес туда правки?

 

то он возьмет файл уже с правками 1го модуля и добавит туда изменения которые внесет 2й. и тд

 

PS:

 

Конфликты модулей по любому какие то да будут. Этого никак не избежать.

Например 1й (модуль) добавит метод get_xx в класс Products. И 2й - так же. 

В итоге мы получим php ошибку на дубль метода.

С этой стороны кажется что способ через наследования - лучше (если будут приоритеты и тд). 

Но на мой взгляд это не так. Поскольку даже так нормальной работы обоих модулей не будет.

 

Вот например добавить поле в sql выборку товара.

Через наследование - это нужно подменять весь метод. Тогда как вообще будут работать 2 модуля с одним методом?  

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

то он возьмет файл уже с правками 1го модуля и добавит туда изменения которые внесет 2й. и тд

 

Но автор модуля не может знать на чистую систему его поставят или поверх других модулей

Ссылка на сообщение
Поделиться на другие сайты

Но автор модуля не может знать на чистую систему его поставят или поверх других модулей

 

Ну эта проблема везде будет присутствовать...

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

то он возьмет файл уже с правками 1го модуля и добавит туда изменения которые внесет 2й. и тд

 

PS:

 

Конфликты модулей по любому какие то да будут. Этого никак не избежать.

Например 1й (модуль) добавит метод get_xx в класс Products. И 2й - так же. 

В итоге мы получим php ошибку на дубль метода.

С этой стороны кажется что способ через наследования - лучше (если будут приоритеты и тд). 

Но на мой взгляд это не так. Поскольку даже так нормальной работы обоих модулей не будет.

 

Вот например добавить поле в sql выборку товара.

Через наследование - это нужно подменять весь метод. Тогда как вообще будут работать 2 модуля с одним методом?  

Если автор модуля будет культурным человеком, то он просто вызовет parent::get_xx, изменит то что ему нужно и выдаст результат дальше

Ссылка на сообщение
Поделиться на другие сайты

Если автор модуля будет культурным человеком, то он просто вызовет parent::get_xx, изменит то что ему нужно и выдаст результат дальше

 

Ну конкретно о sql запросе. 2 модуля на добавление поля field1 (модуль1) и field2 (модуль2) в запрос на get_product. 

Как будут выглядеть модули через наследование? 

Ссылка на сообщение
Поделиться на другие сайты

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

Поддерживаю! Я об этом когда-то писал Денису, но никакой реакции.

В этой CMS используется шаблон проектирования HMVC, что в первую очередь нужно сделать в симпле.

Ссылка на сообщение
Поделиться на другие сайты

Ну конкретно о sql запросе. 2 модуля на добавление поля field1 (модуль1) и field2 (модуль2) в запрос на get_product. 

Как будут выглядеть модули через наследование? 

Во-первых в get_product будет запрос SELECT * - так что поле подтянется само, если есть в базе

Если же эти поля, например, внешние ключи от других таблиц, то два модуля могут выглядеть примерно так:

 

 

class MyModule1 extends MyModule1\Products
{
	public function get_product($id)
	{
		$product = parent::get_product($id);
		$product->some_data1 = $this->db->***;
		return $product;
	}

}

class MyModule2 extends MyModule2\Products
{
	public function get_product($id)
	{
		$product = parent::get_product($id);
		$product->some_data2 = $this->db->***;
		return $product;
	}

}

Ссылка на сообщение
Поделиться на другие сайты

Поддерживаю! Я об этом когда-то писал Денису, но никакой реакции.

В этой CMS используется шаблон проектирования HMVC, что в первую очередь нужно сделать в симпле.

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

Наследование же оставляет код симплы таким же простым как и раньше, при этом дает возможность изменить абсолютно любой код, а не только тот, который заранее спроектирован под возможность изменения

Ссылка на сообщение
Поделиться на другие сайты

Ну конкретно о sql запросе. 2 модуля на добавление поля field1 (модуль1) и field2 (модуль2) в запрос на get_product. 

Как будут выглядеть модули через наследование? 

 

Еще один из возможных вариантов:

 

class Products extends Simpla
{
	protected fields = array('name', 'price');
	public function get_product($id)
	{		
		$this->db->query('SEELCT ?@ FROM products WHERE id=?', $this->fields, $id);
		return $this->db->result();
	}
}


class MyModule1 extends MyModule1\Products
{
	public function __construct()
	{
		parent::__construct();
		$this->fields = array_push(parent::$fields, 'новоеполе1');
	}
}

class MyModule1 extends MyModule2\Products
{
	public function __construct()
	{
		parent::__construct();
		$this->fields = array_push(parent::$fields, 'новоеполе2');
	}
}
Ссылка на сообщение
Поделиться на другие сайты

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

Наследование же оставляет код симплы таким же простым как и раньше, при этом дает возможность изменить абсолютно любой код, а не только тот, который заранее спроектирован под возможность изменения

При HMVC не сильно то и усложнится архитектура.

Любой веб-программист, разбирающийся в MVC, с легкостью напишет модуль под CMS.

Если вы боитесь увеличить код ядра на 2 тысячи строк, тогда да... Это проблема.

 

К примеру когда писал модуль для ImageCMS, мне понадобилось менее 4х дней на создание конструктора форм.

Достаточно просто написать вменяемую документацию для разработчиков.

Ссылка на сообщение
Поделиться на другие сайты

Во-первых в get_product будет запрос SELECT * - так что поле подтянется само, если есть в базе

Если же эти поля, например, внешние ключи от других таблиц, то два модуля могут выглядеть примерно так:

 

Ну это нужно будет перелопатить весь движок. И то не получится предсказать все желания для авторов модулей...

Вот например если нужен JOIN? (это еще простые примеры)

 

Еще один из возможных вариантов:

Я например автор модуля MyModule2. Ты MyModule1.

Как мне знать что нужно еще тебя наследовать? Или я не так смысл понял? 

Ссылка на сообщение
Поделиться на другие сайты

Ну это нужно будет перелопатить весь движок. И то не получится предсказать все желания для авторов модулей...

Вот например если нужен JOIN? (это еще простые примеры)

 

Еще один из возможных вариантов:

Я например автор модуля MyModule2. Ты MyModule1.

Как мне знать что нужно еще тебя наследовать? Или я не так смысл понял? 

Вам не нужно знать кого наследовать, вы наследуете класс "class MyModule1 extends MyModule1\Products" а не "class MyModule1 extends Products". Симпла в итоге сама составит цепочку наследований class MyModule2 extends class MyModule1 extends Products

 

Если нужен join - этот пример я привел первым. Ну или, в крайнем случае, вы можете вообще весь метод переопределить. В любом случае никакой "другой" модульностью вы не сможете сделать гибче чем предлагаю я.

Ссылка на сообщение
Поделиться на другие сайты

Вам не нужно знать кого наследовать, вы наследуете класс "class MyModule1 extends MyModule1\Products" а не "class MyModule1 extends Products". Симпла в итоге сама составит цепочку наследований class MyModule2 extends class MyModule1 extends Products

 

Если нужен join - этот пример я привел первым. Ну или, в крайнем случае, вы можете вообще весь метод переопределить. В любом случае никакой "другой" модульностью вы не сможете сделать гибче чем предлагаю я.

 

Ну переопределить весь метод - это самое простое.

Главное то бы другие модули точно так же не делали...

 

И еще вопрос: 

А как быть с изменениями шаблонов? 

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Ну переопределить весь метод - это самое простое.

Главное то бы другие модули точно так же не делали...

 

И какая же получается модульность? Вот я один буду как барин - что хочу, то и ворочу, и вы там, все прочие, делайте аккуратно и по мелочи только, чтоб мой великий код не попортить...

 

Пока все похоже на дележ шкуры неубитого медведя...

 

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

 

Скажем, так:

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

модуль 2 добавляет поле только в таблицу заказов,

модуль 3 добавляет поле только в таблицу покупателей,

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

модуль 5 добавляет ДВА поля только в таблицу заказов, при заказе требуется, чтобы хотя бы одно из полей было заполнено.

 

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

Ссылка на сообщение
Поделиться на другие сайты

опять началось!

Корс хватит флудить! 

Вот тебе форум. Там оценят твои способности по достоинству

 

Все то что ты пишешь обсуждалось еще начиная с  #20 поста

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Ну переопределить весь метод - это самое простое.

Главное то бы другие модули точно так же не делали...

 

И еще вопрос: 

А как быть с изменениями шаблонов? 

http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl

{block 'footer'}
Этот блок переопределен полностью
{/block}

{block 'pagination' prepend}
Этот текст добавится перед блоком
{/block}

{block 'categories' append}
Этот текст добавится после блока
{/block}


Ссылка на сообщение
Поделиться на другие сайты

 

http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl



{block 'footer'}
Этот блок переопределен полностью
{/block}

{block 'pagination' prepend}
Этот текст добавится перед блоком
{/block}

{block 'categories' append}
Этот текст добавится после блока
{/block}


 

Ну это опять же потребует правок для адаптации по всему движку...

Ну ладно, будем ждать релиза. 

 

По поводу приоритета модулей вижу 2 варианта:

1) Использовать имена файлов модулей и читать по очереди просто. Или можно добавить жесткие требования к имени и тогда даже грузить их по необходимости. пример: products_1_mymodule.php 

 

2) Через какой то пусковой файл который будет хранить настройки заданные юзером (вкл/выкл, приоритет + может еще что то).

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

Это нужно -1% владельцам магазина.
Ссылка на сообщение
Поделиться на другие сайты

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

 

Возникал уже подобный вопрос. Аж 4 спеца взялись и анносировали скорый выпуск "адаптивной админки". Но времени прошло более года, оные спецы из темы ушли, по  вопросу глухо молчат. Разве что могут отвечать с агрессией в сторону спрашивающего, когда в теме спросят - как мол, ребята, дела - вроде как пообещали выложить "скоро", а месяцы и даже годы бегут...

 

Тот же Noxter в той теме писал

1. "Моя наработка (будет бесплатна), делаю понемногу, использую Bootstrap v3.3.2 (намного новее чем ТС)."

2. "Мой знакомый занимается тем же самым, скорее всего он быстрее закончит чем ТС и выложит бесплатно."

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

 

Должно, не потянули спецы работу, оказалась сложнее, чем думали...

 

Подробности тут:

http://forum.simplacms.ru/topic/6727-%D0%B2-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5-bootstrap-simpla-admin/page-3?do=findComment&comment=90717

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...