организация виджетов как в WP

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
dzirt68
Сообщения: 32
Зарегистрирован: 2013.03.16, 00:53

организация виджетов как в WP

Сообщение dzirt68 »

Суть вопроса в том, как организовать виджеты или модули(название сути не меняет) чтобы их можно было включать и отключать с админки? т.е. например каруселька фотокок. надоела она мне я зашел в панель нажал off и она исчезла. подтолкните на мысль плиз
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: организация виджетов как в WP

Сообщение ifelse »

Перелопатить конфиг
dzirt68
Сообщения: 32
Зарегистрирован: 2013.03.16, 00:53

Re: организация виджетов как в WP

Сообщение dzirt68 »

а причем тут конфиг?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: организация виджетов как в WP

Сообщение rak »

1. убрать описание модулей в конфиге
2. сделать класс, который будет отвечать за подключение модулей из бд и поместить его в preload
3. сделать таблицу в бд с описанием модулей, модель, crud; метод, который ищет новые модули, не добавленные в бд.
4. все виджеты, ссылки и т.п., которые завязаны на модули обрамлять кодом

Код: Выделить всё

<?php if(Yii::app()->hasModule('mymodule')): ?>
...
<?php endif; ?>
dzirt68
Сообщения: 32
Зарегистрирован: 2013.03.16, 00:53

Re: организация виджетов как в WP

Сообщение dzirt68 »

rak писал(а):1. убрать описание модулей в конфиге
2. сделать класс, который будет отвечать за подключение модулей из бд и поместить его в preload
3. сделать таблицу в бд с описанием модулей, модель, crud; метод, который ищет новые модули, не добавленные в бд.
4. все виджеты, ссылки и т.п., которые завязаны на модули обрамлять кодом
ты видимо не понял о каких я модулях. я про виджеты имел ввиду как в ВП а не отдельные модули в yii
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: организация виджетов как в WP

Сообщение rak »

собственно это не так уж и важно, смысл не особо меняется
1. делаешь базовый класс для своих виджетов-плагинов
2. делаешь, допустим, json конфиги, которые складываешь в определенную папку(чтобы её можно было просканировать на наличие новых виджетов), в которых хранишь путь, возможные настроки и т.п.
3. делаешь табличку, которая хранит инфу о всех установленных виджетах ну и модель + crud
4. при отображении виджета проверяешь включен ли он
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: организация виджетов как в WP

Сообщение lancecoder »

Код: Выделить всё

$this->widget('my',array(
     ...
    'visible'=>Yii::app()->params['widgets']['my'],
));
p.s. но придется все виджеты наследовать от своего :)
dzirt68
Сообщения: 32
Зарегистрирован: 2013.03.16, 00:53

Re: организация виджетов как в WP

Сообщение dzirt68 »

вобщем проще делать это вручную чем выносить в админку как я понял.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: организация виджетов как в WP

Сообщение rak »

dzirt68 писал(а):вобщем проще делать это вручную чем выносить в админку как я понял.
естественно проще
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: организация виджетов как в WP

Сообщение ElisDN »

У меня за это отдельный класс отвечает.

В примитивном случае выглядит так:

Код: Выделить всё

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

Сообщение lancecoder »

Код: Выделить всё

[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]
 
скорее всего ошибки
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: организация виджетов как в WP

Сообщение ElisDN »

lancecoder писал(а):скорее всего ошибки
Да, накопипастил. Там WHERE вместо VALUES. Исправил.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: организация виджетов как в WP

Сообщение lancecoder »

скорее всего опять ошибки :) там наверно не module=1\0
а active
Ответить