Boas,
Antes demais, aviso que já fiz uma pesquisa bem grande sobre este assunto e mesmo assim não cheguei a nenhum lugar.
Sou nova em Drupal e até agora não precisei de utilizar a DB API do drupal por isso tenho uma quantas dúvidas em relação a isto.
Já sei configurar as diferentes BDs em settings.php e já sei fazer queries embora nunca tenha testado.
O problema é onde fazer queries (E conexão) e como imprimir os dados.
Já vi várias soluções como criar nodes ou fazer queries diretamente num ficheiro .tpl.php - nenhuma destas 2 soluções me agrada.
Sei que dá para relacionar os dados da BD externa com a API da view, criando assim uma view para estes - mas não percebi que código/ficheiros criar.
Alguém me pode dar uma ajuda nisto?
O objetivo é pegar numa tabela, por exemplo de produtos e categoria de produtos, e imprimir estes dados:
1º Página da categoria com informação desta e menu lateral (Categoria e submenus com respetivos produtos).
2º Página do produto com informação deste e o mesmo menu
Obrigado :)
Comments
Viva,Podes tentar o módulo
Viva,
Podes tentar o módulo http://drupal.org/project/data
No entanto o Drupal funciona com entidades, pelo que a abordagem correcta a este problema, à maneira do Drupal é criares o Content Type "produto" ou mesmo usares o drupal commerce que já traz uma série de coisas relacionadas. De seguida importares os teus "produtos" com o http://drupal.org/project/commerce_feeds .
Desta forma poderás usar views para listagens dos teus "podutos" e o http://drupal.org/project/panels + http://drupal.org/project/panels_everywhere para desenhares a apresentação dos mesmos.
Desta forma o processo torna-se eficaz e rápido, deixando espaço para escalares o teu projecto.
Abraço,
Ricardo Amaro
Boas, Penso que vou tentar a
Boas,
Penso que vou tentar a solução do pauloamgomes. Se não cumprir com os objetivos então tentarei a tua sugestão.
Obrigado :)
Se optares pela abordagem
Se optares pela abordagem programática e com queries diretas à bd, aconselho a leitura do artigo http://drupal.org/node/18429.
Basicamente explica-te como definires multiplas bd's no settings.php (mantendo a default), e que para executares queries sobre uma bd externa, tens primeiro que a tornar ativa e no fim reverter para a default.
Em termos de tratamento dos dados, idealmente deves criar um módulo que defina as funcionalidades que pretendes, por exemplo, podes criar um módulo com 2 ficheiros:
produtos.info
;$Id$name = "produtos"
description = "modulo de exemplo para ligar a uma bd externa e executar queries"
package = "produtos"
core = 6.x
php = 5.2
version = 6.x-1.0
dentro de produtos.module definir um menu "produtos":
function produtos_menu(){
$items = array ();
$items['produtos/listagem'] = array (
'title' => t('lista de produtos'),
'page callback' => 'produtos_listagem',
'access arguments' => array('access produtos'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
no acesso ao menu "lista de produtos" em /produtos/listagem vai ser executada a funcao produtos_listagem(), onde podes executar a query e tratar os resultados:
function produtos_listagem()
{
db_set_active('produtos_dev');
$results = db_query('SELECT * FROM produtos');
db_set_active('default');
$output = '<ul>';
while($row = db_fetch_object($results)) {
$output .= '<li>';
$output .= '<p>Nome: ' . $row->nome . '</p>';
$output .= '<p>Descricao: ' . $row->descricao . '</p>';
$output .= '<p>Preco: ' . $row->preco . '</p>';
$output .= '</li>';
}
$output .= '</ul>';
return $output;
}
Assim que o modulo esteja ativo e acederes à opção de menu terias uma listagem dos produtos:
Nota que é apenas um exemplo rudimentar, num caso real terás que ter atenção a mais alguns aspectos como theming do módulo, recurso a cache, etc..
A solução que me explicaste
A solução que me explicaste parece ser a ideal tendo em conta o meu nível de conhecimento.
Eu queria tentar utilizar a API do módulo Views para imprimir os resultados mas penso que a fase de aprendizagem/exploração desta me irá ocupar demasiado tempo que não tenho.
Já comecei a tentar o que demonstraste - já antes de ler a tua resposta - só precisava duma confirmação para saber se era a melhor forma ou não.
Já cometi alguns "erros" que não seguiam as boas práticas do Drupal por isso desta vez decidi consultar alguém um pouco + conhecedor disto do que eu :p
Obrigada!
Ok, depois diz se conseguiste
Ok, depois diz se conseguiste o que pretendes.
Em todo o caso o que o Ricardo indicou é conceptualmente a forma adequada de se fazer as coisas, mas para o teu caso, que apenas pretendes consultar dados e lista-los, a via programática é a forma mais rápida e simples, rapidamente consegues obter os resultados pretendidos.
No módulo podes ainda tentar expor a tabela para as views através do hook hook_views_data(), no fundo descreves a tua tabela em termos de campos que o views consiga entender.
Vê a seguinte solução que faz recurso tb ao módulo data:
http://drupal.stackexchange.com/questions/3275/how-do-i-display-an-exter...
Tal como referiste, preciso
Tal como referiste, preciso apenas de consultar e listar os dados - não tem que haver nenhuma ferramenta gráfica que permita o administrador modificar a consulta (penso que até é preferível que não haja).
Eu já tinha lido esse artigo mas não posso utilizar o módulo Data (está em Alpha ainda). Tentei utilizar o hook_views_data por si só mas ainda não entendi muito bem como funciona, por isso tentarei algo mais simples - o que sugeriste na tua 1ª resposta.
[Edit] db_fetch_object não existe em drupal 7, em vez disso utiliza-se foreach($result as $row), penso eu(?)
Sim, o exemplo que coloquei
Sim, o exemplo que coloquei foi montado em 6, no 7 está definitivamente simplificado.
Só para avisar que já
Só para avisar que já consegui fazer o queria :)
Como é normal com o Drupal, ontem estava aflita a pensar que não ia conseguir fazer isto mas hoje já adiantei bastante trabalho!
Obrigada, novamente!