Jump to content

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


Recommended Posts

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

 

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

Но в 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 останется без изменений

Link to post
Share on other sites
  • Replies 166
  • Created
  • Last Reply

Top Posters In This Topic

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

Но в 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 останется без изменений

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

Link to post
Share on other sites

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

 

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

 

PS:

 

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

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

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

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

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

 

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

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

Edited by yr4ik
Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

 

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

Edited by yr4ik
Link to post
Share on other sites

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

 

PS:

 

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

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

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

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

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

 

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

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

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

Link to post
Share on other sites

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

 

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

Ну конкретно о 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;
	}

}

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

Ну конкретно о 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');
	}
}
Link to post
Share on other sites

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

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

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

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

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

 

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

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

Link to post
Share on other sites

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

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

 

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

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

 

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

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

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

Link to post
Share on other sites

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

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

 

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

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

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

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

 

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

Link to post
Share on other sites

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

 

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

 

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

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

 

И еще вопрос: 

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

Edited by yr4ik
Link to post
Share on other sites

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

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

 

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

 

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

 

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

 

Скажем, так:

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

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

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

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

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

 

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

Link to post
Share on other sites

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

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

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

 

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

Edited by yr4ik
Link to post
Share on other sites

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

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

 

И еще вопрос: 

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

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

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

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

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


Link to post
Share on other sites

 

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) Через какой то пусковой файл который будет хранить настройки заданные юзером (вкл/выкл, приоритет + может еще что то).

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Это нужно -1% владельцам магазина.
Link to post
Share on other sites

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

 

Возникал уже подобный вопрос. Аж 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

Link to post
Share on other sites
×
×
  • Create New...