MySQL Workbench script para Drupal Schema

Sempre me dá calafrios quando preciso escrever o schema das tabelas para usar no drupal nos meus módulos. Como não é possível decorar todas os data types do schema do drupal, é preciso ficar olhando a documentação o tempo todo ou seja, sempre é um porre escrever esta parte do módulo.

A MySQL AB criou, já a algum tempo, um modelador de banco de dados chamado MySQL Workbench e já esta bem usável.

Bem, o Workbench possui uma API com binds para LUA e Python e permite a criação de módulos ou scritps bem bacana porém pouco ducumentado. Tive que ler muito código e pesquisar muito na internet para chegar em algo usável... sem falar que tem algum bug com o MySQL WB no mac que não reconhece o módulo então tive que fazer um baca para ele ser reconhecido.

  • Baixe o arquivo listado neste documento e remova o _.txt do nome do arquivo.
  • Instale o módulo (será necessário reiniciar o MWb).
  • Crie um modelo apenas com as tabelas que seu módulo do drupal vai criar.
  • Vá no menu Plugins / Catalogs / Drupal 6 Schema - All Tables.
  • Abra o Output window no menu View / Advanced / Output window e clique no output.

Vale ressaltar que o schema do drupal não aceita qualquer tipo do mysql, DATE por exemplo, então eu estou convertendo para um outro mais próximo.

Tenho intenções de melhorar este módulo para MWb para criar o schema apenas das tabelas selecionadas.

Se você tiver alguma sugestão a fazer, sinta-se livre para modificar e/ou falar comigo... mas não deixe de falar comigo... :)

Flw

AnexoTamanho
wb_drupal6_schema.py4.6 KB
Your rating: Nenhum Average: 5 (2 votes)

Login na horizontal

Hoje, pela manhã, enquato dava uma navegada pelo site da Trellon achei a solução para um problema comum que, provavelmente, quase ninguém sabe.

Criar um login na horizontal sem ter que escrever um form em html.

O grande lance é que o tema permite usar o hook_theme no template.php onde o hook eh o nome do seu tema... ex: garland_theme. Agora tudo fica mais fácil pois podemos criar itens para novos itens de tema ou sobrescrever existentes.

Bem, vamos à solução:

Primeiro precisamos criar o hook_theme para dar as coordenadas ao template engine do Drupal dizendo para ele que deve usar o template "user-login-block" para o form id "user_login_block" no arquivo template.php .

<?php
//....

function meutema_theme($existing, $type, $theme, $path) {
  return array(
   
//...
   
'user_login_block' => array(
     
'arguments' => array('form' => NULL),
     
'template' => 'user-login-block', // this is the name of the template
   
),
   
//...
 
);
}

//...
?>

Agora que já dissemos ao Drupal para renderizar o formulario "user_login_block" usando o template "user-login-block", vamos criar o template.

Crie o arquivo user-login-block.tpl.php no diretorio do seu tema e coloque o código que desejar. Para você ver e testar essa solução eu fiz da seguinte forma:

<?php

$form
['name']['#title'] = $form['pass']['#title'] = '';

$form['name']['#size'] = $form['pass']['#size'] 6;

?>

<div id="user_login_block">

<div id="user-name"><?php print drupal_render($form['name']); ?></div>
<div id="user-pass"><?php print drupal_render($form['pass']); ?></div>
<div id="user-login"><?php print drupal_render($form['submit']); ?></div>
<div id="user-links"><?php print drupal_render($form['links']); ?></div>

<?php print drupal_render($form); ?>

Template modicficado!

</div>

Agora falta o CSS para colocar um campo do lado do outro... como eu não sou expert nisso, vou deixar para algum design resolver isso mas acho que com float: left; resolveria.

Simples né? Agora limpe o cache e atualize a página para ver o resultado.

flw.

Fonte:
http://trellon.com/content/blog/theming-user-register-form-d6

Your rating: Nenhum Average: 5 (6 votes)

Tirando o leia mais do node

Hoje fui questionado de como tirar o link Leia mais que fica no fim dos nodes.

De cara pensei no caminho mais longo, criar uma função tema para o links (theme_links) e tirar o cara de lá... mas lembrei depois de mais algumas linhas de conversa do preprocess...

Usando o preprocess tudo fica muito mais fácil. A solução fica assim:

Abra/Crie o arquivo template.php que fica no diretório do seu tema e coloque este código:

<?php
function phptemplate_preprocess_node(&$vars) {
 
$node = $vars['node'];
  unset(
$node->links['node_read_more']);
 
$vars['links'] = !empty($node->links) ? theme('links', $node->links, array('class' => 'links inline')) : '';
}
?>

LIMPE O CACHE DO DRUPAL

E pronto! Só isso...

O mais engraçado disso tudo é que meu amigo (Israel Texeira) já havia tentado isso e não havia obtido sucesso... Maldito Cache... ele era o problema...

Então fica um ensinamento...

O cache é a raiz de todos os máles.

Flw!

Your rating: Nenhum Average: 5 (1 vote)

Modificando o tema do menu do drupal 5

As vezes seu tema exige algumas modificações no menu pois o padrão do Drupal 5 não te atende. Para isso você vai precisar escrever algumas funções temas no template.php do seu tema.

O drupal usa estas 3 funções para montar os menus:

http://api.drupal.org/api/function/theme_menu_tree/5
http://api.drupal.org/api/function/menu_tree/5
http://api.drupal.org/api/function/theme_menu_item/5

A theme_menu_tree chama a menu_tree que chama a theme_menu_item.

No teu caso, você vai precisar mesmo modificar a menu_tree mas como ela não é funções tema, você vai precisar criar uma para o theme_menu_tree... hehehehe

Na theme_menu_tree vc vai chamar a minha_menu_tree onde você vai fazer tudo o que a menu_tree faz e colocar no foreach dela a verificação se eh first ou last... de alguma forma vc vai precisar passar isso para a theme_menu_item...

Para não precisar alterar a quantidade de parâmetros da função, podemos aproveitar que o primeiro parametro ($mid) é um array e passar esta informação por ele...

Dae so falta alterar o theme_menu_item para colocar o first/last no li...

O resultado final ficaria mais ou menos assim:

<?php
function mythemename_menu_tree($pid = 1) {
  if (
$tree = meusuper_menu_tree($pid)) {
    return
"\n<ul class=\"menu\">\n". $tree ."\n</ul>\n";
  }
}

function
meusuper_menu_tree($pid) {
 
$menu = menu_get_menu();
 
$output = '';

  if (isset(
$menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
   
$total_children = count($menu['visible'][$pid]['children']);
   
$i = 0;
    foreach (
$menu['visible'][$pid]['children'] as $mid) {
     
$i++;
     
$type = isset($menu['visible'][$mid]['type']) ? $menu['visible'][$mid]['type'] : NULL;
     
$children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
      if (
$i == 1) {
       
$mid['mythemename_position'] = 'first';
      }
      elseif (
$i == $total_children) {
       
$mid['mythemename_position'] = 'last';
      }
     
$output .= theme('menu_item', $mid, menu_in_active_trail($mid) || ($type & MENU_EXPANDED) ? theme('menu_tree', $mid) : '', count($children) == 0);
    }
  }

  return
$output;
}

function
mythemename_menu_item($mid, $children = '', $leaf = TRUE) {
 
$position = isset($mid['mythemename_position']) && !empty($mid['mythemename_position']) ? $mid['mythemename_position'] : '';
  return
'<li class="'.$position.' '. ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children ."</li>\n";
}

?>

Como fiz isso tudo sem testar, pode ser que não funcione 100% mas a idéia é esta. Caso você encontre algum erro, me avise "ASAP".

Flw

Your rating: Nenhum Average: 5 (7 votes)

Colocando radios em duas colunas

Estou mexendo com o Ubercart nestes dias e precisei criar um campo do tipo radios (grupo de radio button) em duas colunas para colocar as parcelas do pagamento.

A solução foi muito simples, bastou eu criar um tema para o CAMPO.

Ficou assim:

<?php
//...

function uc_locaweb_visa_cart_form ($order) {
   
// ...
   
$parcelas = array(1 => "À Vista");
   
    for (
$i=2; $i <= $max_parcels; $i++) {
       
$juros_msg = $i > $juros_par ? 'com juros' : 'sem juros';
       
$parcelas[$i] = "{$i}x {$juros_msg}";   
    }
   
   
$form['visa_parcelas'] = array(
       
'#type' => 'radios',
       
'#title' => 'Parcelamento',
       
'#description' => "Quando houver pagamento com juros: {$juros}% ao mês",
       
'#default_value' => 1,
       
'#options' => $parcelas,
       
'#theme' => 'uc_locaweb_visa_parcelas'
   
);
   
    return
$form;
}

function
theme_uc_locaweb_visa_parcelas($element) {
   
$col1 = $col2 = '';
   
   
$total = count($element['#options']);
   
$metade = (int) $total / 2;
   
    for (
$i=1; $i <= $total; $i++) {
        if (
$i <= $metade) {
           
$col1 .= drupal_render($element[$i]);
        }
        else {
           
$col2 .= drupal_render($element[$i]);
        }
    }
 
   
$output = '<table><tbody style="border: 0px;">';
   
$output .= "<tr><td>{$col1}</td><td>{$col2}</td></tr>";
   
$output .= '</tbody></table>';
 
    return
$output;
}

//...
?>

Resolvi postar aqui pois acho que é uma informação bastante válida pra todos.

flw!

Your rating: Nenhum Average: 5 (1 vote)

PHPDoc no Komodo Edit

Já a algum tempo estou usando o Komodo Edit que por sinal tem me deixado muito satisfeito.

Porém, por ser uma versão gratuita, não tem uma penca de funcionalidades, uma delas é a documentação do código PHP.

Para solucionar esta dificuldade, resolvi escrever um macro para o komodo que monta o bloco de comentário apenas de funções e métodos do php.

Quem quiser ver o código do macro na integra, continue lendo este artigo ou apenas faça o download do pacote.

A macro foi escrita em Javascript.

if (komodo.view) { komodo.view.setFocus() };

scimoz = ko.views.manager.currentView.scimoz;
ko.commands.doCommand('cmd_blockSelect')
//scimoz.lineEnd();
//scimoz.homeExtend();

line   = scimoz.selText
indent = line.match(/^(\s*)/)[0];

scimoz.home();

function kphpdoc_addText (str) {
  scimoz.insertText(scimoz.currentPos, indent + str + '\n');
  scimoz.lineDown()
}

function kphpdoc_parse_params(str) {
  er = /(?:(\w+)\s+)?(&\s*)?(\$\w+)/g;
  er2 = /(?:(\w+)\s+)?(?:&\s*)?(\$\w+)/;
  rs1 = str.match(er);
  for(i in rs1) {
    rs2 = rs1[i].match(er2);
    type = rs2[1] || 'mixed';
    kphpdoc_addText(' * @param '+type+' '+rs2[2]);
  }
}

function kphpdoc_func(data) {
  fin = data[1] || data[4];
  sta = data[2] || data[5];
 
  kphpdoc_addText('/**');
  kphpdoc_addText(' * '+ data[7]);
  kphpdoc_addText(' *');
  if (sta) kphpdoc_addText(' * @static');
  if (fin) kphpdoc_addText(' * @final');
  if (data[3]) kphpdoc_addText(' * @access '+ data[3]);
 
  kphpdoc_parse_params(data[8]);
 
  if (line.match(/return/)) kphpdoc_addText(' * @return mixed');
  kphpdoc_addText(' **/');
}

er_func = /^\s*(final\s+)?(static\s+)?(?:(public|private|protected)?\s+)?(final\s+)?(static\s+)?function\s+(&\s*)?(\w+)\s*\((.*)\)\s*\{?/;
if (rs = line.match(er_func)) {
  kphpdoc_func(rs);
}

Caso você encontre algum erro ou tenha alguma sugestão de melhoria, é só falar...

t+

AnexoTamanho
KPHPDOC.kpz1.9 KB
Your rating: Nenhum Average: 5 (1 vote)

Executando uma view pelo código

Este recurso é muito bom para usar no desenvolvimento de temas para drupal para criar um bloco de notícias ou últimos posts do fórum na área de conteúdo.

Bem, o módulo view disponibiliza duas funções que retornam o HTML já processado pelo módulo. As funções são: views_view_page e views_view_block. Ambas esperam o id da view ou o nome da view como primeiro parâmetro.

Ex.:

<?php
function meumodulo_page() {
 
$output = views_view_page('ultimosartigos');

  return
$output;
}
?>

Simples né?

Flw!

Your rating: Nenhum Average: 4.5 (2 votes)

Habilitando o Compiz no HP Pavilion DV6623CL

Assim que instalei meu Ubuntu no notebook, tentei habilitar o compiz e não foi... descobri que minha placa de vídeo usa o driver xv e o mesmo está na blacklist do compiz.

A solução é muito fácil de fazer... basta mandar o compiz não fazer as "checagens"...

Para isso, coloque o seguinte conteúdo no arquivo ~/.config/compiz/compiz-manager :
SKIP_CHECKS=yes

E agora reinicie seu X e tchum! ta pronto!

Flw

Blogged with Flock

Your rating: Nenhum Average: 3 (1 vote)

Remova o "Solicitar uma nova senha" do Drupal

Criei um módulo para tirar a opção de solicitar uma nova senha por email do drupal.

O módulo No Request new password ainda está bem enxuto e se você tiver alguma idéia, pode contribuir também.

http://drupal.org/project/noreqnewpass

flw!

No votes yet

apt-get install drupal5

Tenho visto que muita gente tem preferido instalar o drupal pelo proprio gerenciador de pacotes do Ubuntu ou Debian e tem tido alguma dificuldade na hora de colocar o site no servidor de produção.

Após este tutorial você vai ver como é simples.

1) Exporte o banco de dados da instalação do drupal. No Ubuntu, geralmente é usado o banco de dados drupal5. Para descobrir qual esta sendo usado, abra o arquivo /etc/drupal/5/sites/default/dbconfig.php.

2) Importe no banco de dados do seu servidor de produção.

3) Baixe do site do drupal a MESMA VERSÃO do drupal que você instalou na sua máquina. Caso você não saiba qual a versão, com o comando $ apt-cache show drupal5 | grep Version você vai ver.

4) Descompacte o arquivo.

5) Faça o upload dos arquivos do drupal e os módulos extras para o servidor de produção.

6) Edite o arquivo settings.php, que se encontra em sites/default/settings.php, alterando a variavel $db_url com as informações do banco de dados do seu servidor de produção.

7) ACESSE O SITE.

Possíveis Problemas

* Os módulos extras que eu instalei não estão habilitados. Acesse admin/build/modules e habilite novamente.

Teóricamente deve funcionar... mas caso tenha algum problema, me avisa que eu altero este tutorial.

Acho que é só isso...

Flw!

No votes yet