Я никогда не делал этого, поэтому не могу предложить вам полное решение, но я могу, по крайней мере, попытаться указать вам правильное направление.
Взгляните на класс загрузчика, расположенный в /system/core/Loader.php
. Это то, к чему вы обращаетесь, когда используете $this->load
. Он содержит ряд методов для загрузки ресурсов разных типов (моделей, библиотек и т. Д.). Возможно, вам удастся избежать дублирования метода model()
, переименования его в widget()
и обновления путей для проверки каталога /application/widgets
. Возможно, вам придется сделать немного больше, например, создать базовый класс CI_Widget, но вы должны иметь возможность построчно проходить через метод и выяснить, что ему требуется для работы.
Надеюсь, это поможет.
Изменить (1/12/2012):
Вот пример кого-то, кто расширяет CodeIgniter для поддержки пользовательского типа ресурса.
Sparks - это система управления пакетами для CodeIgniter, очень похожая на RubyGems для Ruby. Использовать искру просто. После того, как вы изменили среду CodeIgniter для поддержки искр, вы просто устанавливаете спарк и затем загружаете его, используя $this->load->spark('...');
. Изменение среды CodeIgniter для поддержки искр просто влечет за собой расширение класса загрузчика для поддержки нового метода sparks()
.
Код для изменения класса загрузчика доступен здесь . Следуя шаблону в этом файле, вы сможете загружать свои собственные типы ресурсов. В своем предыдущем ответе я сказал, что вы можете избежать изменения файла /system/core/Loader.php
, хотя я бы порекомендовал вам придерживаться подхода, используемого искрами, и использовать файл /application/core/MY_Loader.php
.