организация виджетов как в WP
организация виджетов как в WP
Суть вопроса в том, как организовать виджеты или модули(название сути не меняет) чтобы их можно было включать и отключать с админки? т.е. например каруселька фотокок. надоела она мне я зашел в панель нажал off и она исчезла. подтолкните на мысль плиз
Re: организация виджетов как в WP
Перелопатить конфиг
Re: организация виджетов как в WP
а причем тут конфиг?
Re: организация виджетов как в WP
1. убрать описание модулей в конфиге
2. сделать класс, который будет отвечать за подключение модулей из бд и поместить его в preload
3. сделать таблицу в бд с описанием модулей, модель, crud; метод, который ищет новые модули, не добавленные в бд.
4. все виджеты, ссылки и т.п., которые завязаны на модули обрамлять кодом
2. сделать класс, который будет отвечать за подключение модулей из бд и поместить его в preload
3. сделать таблицу в бд с описанием модулей, модель, crud; метод, который ищет новые модули, не добавленные в бд.
4. все виджеты, ссылки и т.п., которые завязаны на модули обрамлять кодом
Код: Выделить всё
<?php if(Yii::app()->hasModule('mymodule')): ?>
...
<?php endif; ?>
Re: организация виджетов как в WP
ты видимо не понял о каких я модулях. я про виджеты имел ввиду как в ВП а не отдельные модули в yiirak писал(а):1. убрать описание модулей в конфиге
2. сделать класс, который будет отвечать за подключение модулей из бд и поместить его в preload
3. сделать таблицу в бд с описанием модулей, модель, crud; метод, который ищет новые модули, не добавленные в бд.
4. все виджеты, ссылки и т.п., которые завязаны на модули обрамлять кодом
Re: организация виджетов как в WP
собственно это не так уж и важно, смысл не особо меняется
1. делаешь базовый класс для своих виджетов-плагинов
2. делаешь, допустим, json конфиги, которые складываешь в определенную папку(чтобы её можно было просканировать на наличие новых виджетов), в которых хранишь путь, возможные настроки и т.п.
3. делаешь табличку, которая хранит инфу о всех установленных виджетах ну и модель + crud
4. при отображении виджета проверяешь включен ли он
1. делаешь базовый класс для своих виджетов-плагинов
2. делаешь, допустим, json конфиги, которые складываешь в определенную папку(чтобы её можно было просканировать на наличие новых виджетов), в которых хранишь путь, возможные настроки и т.п.
3. делаешь табличку, которая хранит инфу о всех установленных виджетах ну и модель + crud
4. при отображении виджета проверяешь включен ли он
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: организация виджетов как в WP
Код: Выделить всё
$this->widget('my',array(
...
'visible'=>Yii::app()->params['widgets']['my'],
));
Re: организация виджетов как в WP
вобщем проще делать это вручную чем выносить в админку как я понял.
Re: организация виджетов как в WP
естественно прощеdzirt68 писал(а):вобщем проще делать это вручную чем выносить в админку как я понял.
Re: организация виджетов как в WP
У меня за это отдельный класс отвечает.
В примитивном случае выглядит так:
В вашем же случае также сделать для виджетов.
А админке выводить грид с массивом виджетов, например.
В примитивном случае выглядит так:
Код: Выделить всё
class ModuleManager
{
protected $modules = array();
public function init(){
$this->modules = array();
$rows = Yii::app()->db->cache(3600*24)->createCommand('SELECT * FROM {{module}}')->queryAll();
foreach ($rows as $row){
$this->modules[$row['module']] = $row['active'];
);
}
public function install($module){
if (!$this->installed($module){
Yii::app()->db->createCommand('INSERT INTO {{module}} (module, active) VALUES (:module, 0)')
->execute(array(':module'=>$module);
$this->modules[$module] = 0;
}
}
public function uninstall($module){
if ($this->installed($module){
Yii::app()->db->createCommand('DELETE FROM {{module}} WHERE module=:module')
->execute(array(':module'=>$module);
unset($this->modules[$module]);
}
}
public function activate($module){
if ($this->installed($module){
Yii::app()->db->createCommand('UPDATE {{module}} SET active=1 WHERE module=:module')
->execute(array(':module'=>$module);
$this->modules[$module] = 1;
}
}
public function unactivate($module){
if ($this->installed($module){
Yii::app()->db->createCommand('UPDATE {{module}} SET active=0 WHERE module=:module')
->execute(array(':module'=>$module);
$this->modules[$module] = 0;
}
}
public function installed($module){
return isset($this->modules[$module]);
}
public function active($module){
return isset($this->modules[$module]) && $this->modules[$module];
}
}
Код: Выделить всё
'components'=>array(
// ...
'moduleManager'=>array(
'class'=>'ModuleManager',
),
),
Код: Выделить всё
<?php if (Yii::app()->moduleManager->active('slideshow'): ?>
<?php $this->widget('slideshow.widgets.SlideShowWidget'); ?>
<?php endif; ?>
А админке выводить грид с массивом виджетов, например.
Последний раз редактировалось ElisDN 2013.03.25, 18:47, всего редактировалось 2 раза.
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: организация виджетов как в WP
Код: Выделить всё
[quote=ElisDN]
public function activate($module){
if ($this->installed($module){
Yii::app()->db->createCommand('UPDATE {{module}} SET module=1 VALUES module=:module')
->execute(array(':module'=>$module);
$this->modules[$module] = 1;
}
}
public function unactivate($module){
if ($this->installed($module){
Yii::app()->db->createCommand('UPDATE {{module}} SET module=0 VALUES module=:module')
->execute(array(':module'=>$module);
$this->modules[$module] = 0;
}
}
[/quote]
Re: организация виджетов как в WP
Да, накопипастил. Там WHERE вместо VALUES. Исправил.lancecoder писал(а):скорее всего ошибки
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: организация виджетов как в WP
скорее всего опять ошибки там наверно не module=1\0
а active
а active
Re: организация виджетов как в WP
Блин...))