Problema Com Cwebmodule::setcomponent

Bom dia amigos do Fórum.

Estou tendo um problema no Yii.

Eu tenho um módulo administrator, e tenho o seguinte código:

AdministratorModule.php




<?php

class AdministratorModule extends CWebModule {


    public $preload = array('bootstrap');


    public function init() {

        // this method is called when the module is being created

        // you may place code here to customize the module or the application

        // import the module-level models and components

        $this->setImport(array(

            'administrator.models.*',

            'administrator.components.*',

            'administrator.extensions.*',

        ));


        // alias para este modulo

        Yii::setPathOfAlias('administrator_module', dirname(__FILE__));


        // cria o componente bootstrap

        $componentes['bootstrap'] = Yii::createComponent(array(

            'class' => 'administrator_module.extensions.bootstrap.components.Bootstrap'

        ));

        

        // cria o componente clientScript

        $componentes['clientScript'] = Yii::createComponent(array(

            'class' => 'administrator_module.components.ClientScript',

        ));

        

        

        // percorre o array de componentes criados

        // e os define

        foreach($componentes as $id => $config) {

            $this->setComponent($id, $config);

        }


................


?>



Tenho uma extensão dentro do módulo que é carregada ao iniciar o mesmo:

ClientScript.php




<?php


class ClientScript extends CClientScript {


    //put your code here


    protected $activeScriptId;

    protected $activeScriptPosition;


    public function beginScript($id, $pos = parent::POS_READY) {


        $this->activeScriptId = $id;

        $this->activeScriptPosition = $pos;


        ob_start();

        ob_implicit_flush(false);

    }


    public function endScript() {


        $script = ob_get_clean();


        //$script = strip_tags($script);

        //$script = substr(trim($script), 8, -9);

        //echo $script;


        $script = preg_replace("/<script[^>]*>/", "", $script, 1);


        $script = preg_replace("/<\/script>/", "", $script, 1);


        CClientScript::registerScript($this->activeScriptId, $script, $this->activeScriptPosition);

    }


}


?>



E na view:

novo.php




<?php $cs = $this->getModule()->clientScript; ?>

..........

<?php $cs->beginScript('administrator_artigo_novo_scripts_' . $id); ?>

<script>

     document.id('<?php echo $id; ?>').addEvent('click', function() {

        $(this).button('loading');

     });

</script>

<?php $cs->endScript(); ?>

...............



Simplesmente o código não registra, se eu colocar esta configuração no main.php ele funciona e registra tudo certo, agora quando é carregado pelo modulo não funciona, ja tentei causar erro de propósito dentro da classe e o erro aparece no Yii, indicando que o componente foi criado com sucesso. Outro teste foi colocar o attributo $teste com o valor "teste" na classe ClientScript e chamar na view com:




<?php $cs = $this->getModule()->clientScript; ?>


<?php echo $cs->teste; ?>



E foi impresso com sucesso na tela, o problema está na hora de registrar o script, lembrando que se a classe for criada direto no main.php ela funciona, mas se criar o componente pelo módulo, dai não funciona. Para o tipo de aplicação que eu quero, eu preciso criar este componente dentro do modulo administrator.

Obrigado desde já, abraços a todos.

Boa tarde amigos do fórum.

Venho informar que consegui solucionar o problema com a seguinte modificação no componente ClientScript

De:




<?php

.........

public function endScript() {

        

        $script = ob_get_clean();


        //$script = strip_tags($script);


        //$script = substr(trim($script), 8, -9);


        //echo $script;


        $script = preg_replace("/<script[^>]*>/", "", $script, 1);


        $script = preg_replace("/<\/script>/", "", $script, 1);

        

        parent::registerScript($this->activeScriptId, $script, $this->activeScriptPosition);

        

    }

.........

?>



Para:




<?php

.........

public function endScript() {

        

        $script = ob_get_clean();


        //$script = strip_tags($script);


        //$script = substr(trim($script), 8, -9);


        //echo $script;


        $script = preg_replace("/<script[^>]*>/", "", $script, 1);


        $script = preg_replace("/<\/script>/", "", $script, 1);

        

        Yii::app()->getClientScript()->registerScript($this->activeScriptId, $script, $this->activeScriptPosition);

        

    }

..........

?>



Agora voltou a funcionar este método e também parou de dar erro no componente Bootstrap quando ele era criado junto com o ClientScript. Algum sabe porque estava acontecendo este erro? Para evitar que outros usuários acabem passando pelo mesmo e eu claro rsrsrsrsrs.

Abraços a todos!

Anderson, você tentou colocar na função beforeControllerAction ao invés da função init?

Não, eu só mudei na classe ClientScript de "parent::registerScript()" para "Yii::app()->getClientScript()->registerScript()", e dai começou a funcionar tudo.

No AdministratorModule.php eu realmente defini os components dentro do método "init()", vou testar como fica definindo dentro do método "beforeControllerAction()", parece que eu já testei isso, não recordo, mas eu testo e volto a postar aqui no fórum os resultados.

Abraços, e obrigado pela resposta.