Drupal + BD Externa

Events happening in the community are now at Drupal community events on www.drupal.org.
rsrocha's picture

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

ricardoamaro's picture

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

rsrocha's picture

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

pauloamgomes's picture

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:

Only local images are allowed.

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

rsrocha's picture

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

pauloamgomes's picture

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

rsrocha's picture

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

pauloamgomes's picture

Sim, o exemplo que coloquei foi montado em 6, no 7 está definitivamente simplificado.

Só para avisar que já

rsrocha's picture

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!

Portugal

Group categories

Classificação

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: