Fuçando Codigos

Então galera, eu uso o MBMenu para renderizar um menu dropdown básico em uma aplicação que estou desenvolvendo. Acontece que tive um pequeno problema, precisava colocar imagens nos itens de cada submenu. Após procurar outras alternativas tive ideia de dar uma fuçadinha no código, visto que a extensão é composta por apenas 2 arquivos (por sinal uma otima extensão).

Após dar uma olhada no codigo alterei as seguintes linhas na função "renderMenuRecursive":

Original:

if(isset($item[‘url’]))

                                echo CHtml::link('<span>'.$item['label'].'</span>',$item['url'],isset($item['linkOptions']) ? $item['linkOptions'] : array());


                        else


                                echo CHtml::link('<span>'.$item['label'].'</span>',"javascript:void(0);",isset($item['linkOptions']) ? $item['linkOptions'] : array());

Novas linhas, repare que o codigo acima ficara agora dentro de um "else":

if(isset($item[‘image’]) && isset($item[‘url’])){

                        echo CHtml::link('<span class="image-menu">'.CHtml::image($item['image']).'</span>'.'<span>'.$item['label'].'</span>',$item['url'],isset($item['linkOptions']) ? $item['linkOptions'] : array());


                    }else{


                        if(isset($item['url']))


                                echo CHtml::link('<span>'.$item['label'].'</span>',$item['url'],isset($item['linkOptions']) ? $item['linkOptions'] : array());


                        else


                                echo CHtml::link('<span>'.$item['label'].'</span>',"javascript:void(0);",isset($item['linkOptions']) ? $item['linkOptions'] : array());


                    }

Posteriormente, para usar o menu, quando você enviar junto com o label e o url do mesmo um outro parametro com o nome de image, possuindo o caminho da mesma, ela aparecerá antes do item no menu.

Um exemplo de como estou usando.:

Monto este arrai dentro do modelo do objeto que conterá as info dos menus.:

$returnarray = array(‘label’ => $this->nome, ‘url’ => Yii::app()->request->baseUrl.‘ITEM/view/id/’.$this->id,‘image’=>Yii::app()->request->baseUrl.’/PASTA_ONDE_FICARAO_AS_IMAGENS/’.$this->imagem_menu);

Abraços, espero ajudar alguem!

Se a idéia é procurar boas soluções, acredito que o legal seria você extender a classe MbMenu. Nunca é uma boa opção alterar código de terceiros dessa maneira, pois isso dificulta a atualização da extensão para versões posteriores.

Outra coisa que percebi é que o não é possível criar um item do menu com imagem, mas sem URL.