pikusov
Пользователь-
Content Count
883 -
Joined
-
Last visited
-
Days Won
7
About pikusov
-
Rank
Автор Simpla CMS
Контактная информация
- Site:
Информация о вас
-
Фриланс
Пользователь
-
Версия CMS
2.x
-
From
http://c.com
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Откуда такая информация?
-
http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl {block 'footer'} Этот блок переопределен полностью {/block} {block 'pagination' prepend} Этот текст добавится перед блоком {/block} {block 'categories' append} Этот текст добавится после блока {/block}
-
Вам не нужно знать кого наследовать, вы наследуете класс "class MyModule1 extends MyModule1\Products" а не "class MyModule1 extends Products". Симпла в итоге сама составит цепочку наследований class MyModule2 extends class MyModule1 extends Products Если нужен join - этот пример я привел первым. Ну или, в крайнем случае, вы можете вообще весь метод переопределить. В любом случае никакой "другой" модульностью вы не сможете сделать гибче чем предлагаю я.
-
Еще один из возможных вариантов: 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::$
-
Он не решает указанной проблемы, вместо этого беспощадно усложняет архитектуру. Наследование же оставляет код симплы таким же простым как и раньше, при этом дает возможность изменить абсолютно любой код, а не только тот, который заранее спроектирован под возможность изменения
-
Во-первых в 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; } }
-
Если автор модуля будет культурным человеком, то он просто вызовет parent::get_xx, изменит то что ему нужно и выдаст результат дальше
-
Но автор модуля не может знать на чистую систему его поставят или поверх других модулей
-
Всё равно не очень понятно - "Он берет нужный файл, вносит в него нужные правки и сохраняет в заданную директорию". А если другой модуль уже внес туда правки?
-
Проблема в какой последовательности подгружать разные модули, расширяющие один и тот же код
-
А как у них решается аналогичная проблема?
-
Модуль это просто класс, который наследует стандартный класс симплы. Как его "подхватывать", точнее в каком порядке подхватывать - в этом и сложность. На данный момент Симпла просто смотрит в папку /extensions/ и наследует стандартные классы теми, что нашлись в папке. Проблема последовательности может возникнуть когда несколько разных модулей переопределяют или дополняют один и тот же метод класса.
-
Если хранить в базе - значит данные о модулях брать из базы через class Database? Но мы не можем создать класс Database, пока не проверим не унаследован ли он каким-то модулем, возможно даже и не одним. А чтобы это узнать, нужно сначала загрузить все модули, при чем в определенном порядке. Проблема курицы и яйца. Еще на счет порядка загрузки модулей - кто вообще его должен устанавливать? Стоит ли администратору давать такие права? Пока склоняюсь к тому, что это дело программиста и класть модули в папку /extensions, а загрузку сделать через /extensions_loader.php, в котором будет список inclu
-
Например как настраивать порядок загрузки модулей и где этот порядок хранить
-
Пока не удается обойти некоторые сложности с модульностью, как только получится - выйдет бета