David Figueiredo 0 Denunciar post Postado Fevereiro 21, 2010 Olá pessoal, Existe a possibilidade de exibir um modulo dentro de um Componente? Se sim me digam como, se ñ me digam uma posível solução! desde já agradeço a todos! Compartilhar este post Link para o post Compartilhar em outros sites
beghelli 0 Denunciar post Postado Fevereiro 22, 2010 Olá David, Uma maneira simples de carregar um módulo dentro de um componente é utilizar o plugin que já vem com o joomla "loadmodule". O que ele faz é, antes de o joomla renderizar o componente, verificar o conteúdo do mesmo à procura de uma palavra-chave que indica à ele a necessidade de carregar um módulo ali. Se houver esta palavra chave, ele renderiza o módulo também. Senão, ele continua com o componente simplesmente. No caso esta "palavra" (seria mesmo uma expressão) que você deve usar para indicar à este plugin que você quer que um módulo seja renderizado naquela posição é a seguinte: {loadposition position} Note que você não diz para o joomla qual módulo quer carregar e sim qual a posição. Ele vai renderizar todos os módulos que estiverem nesta posição para a determinada página onde está sendo exibido o componente. Note também que você deve trocar o 'position' pela posição criada no seu template. :) Só para deixar claro, quando eu disse mais acima que o Joomla procura no conteúdo do componente, ele não vai olhar o código que define o comportamento do componente. Ele vai olhar é mesmo o conteúdo, ou seja, os dados com os quais o componente trabalha e os exibe, que geralmente são inseridos pelo administrador, etc. :P Esta é, a meu ver, uma solução muito simples e bem rápida de ser usada. Existem outras formas mais precisas de se carregar um módulo dentro de um componente, mas você precisaria trabalhar com PHP. Se quiser, podermos aprofundar a discussão sobre estas maneiras também. Depois deixa a gente saber se isto é o suficiente para o que você estava querendo ok? Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
David Figueiredo 0 Denunciar post Postado Fevereiro 22, 2010 Olá beghelli, gostei da sua solução, mais tem um porem: Como vou fazer isso diretamente no código do meu componente? Eu ja tinha encontrado essa solução mais sem se fala em carregar modulo dentro de um artigo e ñ dentro do componente. então vamos a 3 pontos: 1º - Se essa solução realmente é válida para um componente então como exatamente usá-la? 2º - Se ñ, vamos discutir essas outras soluções para encontrarmos uma saída; 3º - Independente dessa solução servir ou não vamos discutir outras soluções, para o meu problema essa solução serve mais sempre é bom aprendermos mais. Estou a disposição para discutirmos esses assuntos. espero tenhamos bons resultados. Desde já agradeço por ter me ajudado! Compartilhar este post Link para o post Compartilhar em outros sites
beghelli 0 Denunciar post Postado Fevereiro 22, 2010 Eu ja tinha encontrado essa solução mais sem se fala em carregar modulo dentro de um artigo e ñ dentro do componente. Justamente, o artigo é uma visualização que é gerida por um componente do joomla. :) Para qualquer componente você pode usar esta solução, basta você incluir no conteúdo do seu componente a expressão que disse acima. Com relação às outras alternativas, posso já te adiantar um link de uma discussão no fórum do joomla exatamente sobre isso: http://forum.joomla.org/viewtopic.php?f=231&t=247191 (usa o google para tradução se precisar, já dá uma ajuda boa). Eu ainda não testei qual seria a melhor solução, talvez o Edultra possa ajudar a gente aqui. :) Mas de qualquer forma eu vou, hoje à noite, mexer no joomla e verificar isso. Amanhã posso te dar um parecer menos irresponsável. :P Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
beghelli 0 Denunciar post Postado Março 1, 2010 David, Desculpa a demora, fui adiando o estudo e só peguei mesmo no fim de semana... :) Antes de te mostrar os resultados a que cheguei, quero que saiba que não são conclusivos. Ainda estou estudando o Joomla e programação inclusive, portanto o que descrevo aqui pode não ser a melhor solução. Eu tentei ao máximo, antes de postar esta mensagem, seguir o padrão MVC do Joomla para a criação de componentes. Vamos então ao que consegui entender: 1 - Para que você consiga renderizar um módulo dentro de um componente através de código você deve antes de tudo criar o módulo e associá-lo à página que leva ao seu componente. Caso isto não seja realizado você não carregará o módulo. 2 - O modelo MVC padroniza a organização do código, separando o código que define a lógica da apresentação dos dados do que define a lógica de manipulação destes dados. Desta forma fica muito mais simples a atualização e manutenção do sistema. Pensando nisso, eu imagino (e aqui eu ficaria muito satisfeito se algum usuário de joomla mais experiente nos desse sua opinião também) que o código que você vai ter que inserir para "pegar" o módulo tenha que ficar dentro do Model do seu componente. Eu acredito que seria o lugar mais lógico, já que o Model é o responsável por lidar com o conteúdo do componente, acessá-lo, editá-lo e repassá-lo à View quando for solicitado. 3 - Se a função que "pega" o módulo que você quer renderizar está no Model do seu componente, então para você renderizar você precisa fazer com que a View do seu componente chame esta função no Model e "jogue" o resultado para o Template. 4 - Levando em conta estes tópicos acima, eu organizei o código desta forma (leve em conta que meu componente se chame 'hello' e que o módulo que eu estou querendo carregar se chame 'welcome'): site/models/hello.php function getModule($type, $title) { $document = &JFactory::getDocument(); $renderer = $document->loadRenderer('module'); $module = JModuleHelper::getModule($type, $title); $html = $renderer->render($module); return $html; } Esta função (getModule()) eu criei para ser reutilizada, caso você necessite carregar mais de um módulo dentro do componente. Basicamente o que ela faz é carregar o documento atual criado pelo Joomla; depois carrega o renderizador de módulos deste documento; carrrega o módulo em questão utilizando o tipo do módulo e o seu título; renderiza o conteúdo deste módulo para uma variável e retorna esta variável. site/views/hello/view.html.php function display($tpl = null) { $model = &$this->getModel(); $welcomeModule = $model->getModule('custom', 'welcome'); $this->assignRef( 'welcomeModule', $welcomeModule); parent::display($tpl); } Note que o conteúdo que a minha View 'joga' para o meu template é apenas o módulo. Isto é apenas para simplificar, o importante é você criar a referência para o seu Model (1ª linha), chamar a função getModule() e 'jogar' o conteúdo carregado pelo Model para o Template (3ª linha). site/views/hello/tmpl/default.php <?php echo $this->welcomeModule; ?> Aqui, novamente para simplificar, o template só tem uma linha: ele vai exibir o conteúdo carregado pelo Model e passado para o template através da View. Para finalizar, algumas observações: - a função JModuleHelper::getModule($type, $title) vai procurar o módulo que está ativo naquela página em questão, que é a do componente. Se o módulo não estiver ativo para aquela página, a função retorna vazio. - Ainda para a função JModuleHelper::getModule($type, $title), o tipo do módulo pode ser escrito tanto com os caracteres 'mod_' ou sem eles. Apenas para o módulo custom, é que você precisa escrever apenas 'custom', sem o 'mod_'. Isso acontece pois o módulo custom não possui um arquivo mod_custom.php, como os outros módulos possuem. Se você usa o 'mod_' para especificar o tipo de módulo, o Joomla vai utilizar um procedimento para carregar o módulo que necessita deste arquivo presente para que o mesmo seja renderizado. Como não existe, o resultado retornado é vazio. - Além disso, se você especificar também o título do módulo, você consegue renderizar exatemente aquele que estava querendo. Isto é legal pois você pode ter vários módulos na mesma posição e renderizar apenas um, o que não acontece com o uso do plugin loadModules, descrito mais acima. - Se você desativar o módulo que está sendo renderizado no componente, ele pára de ser renderizado também. Isso é muito legal pq você ainda mantém o controle do administrator sobre o módulo em questão, e pode facilmente retirá-lo do seu componente, desativando-o. - Para que o seu site não exiba duas vezes o mesmo módulo (uma vez no componente e outra em alguma posição qualquer que ele esteja definido), crie uma posição no xml do template que você não use no seu index.php. Desta forma você poderá associar o módulo à página do seu componente, tornando 'pegável' ao Joomla, sem exibí-lo duplicado. Você pode deixar esta posição (geralmente 'user + algum número') apenas para estes módulos que você já sabe que utilizará em componentes. Usei várias fontes de pesquisa para escrever esta mensagem, seguem as duas mais importantes e significantes: http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1 http://forum.joomla.org/viewtopic.php?f=231&t=247191 Espero que ajude. Se tiver alguma dúvida, posta aí. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites