Drupal/Ubercart… estilo de nó?
-
06-09-2019 - |
Pergunta
Estou tentando estilizar a visualização do produto em um site Drupal, mas estou tendo problemas. Não consigo encontrar onde a visualização do nó (produto) está montada no ubercart!
Estou usando o UC 5.x-1.7 e preciso estilizar a página de visualização do nó (produto).No momento, em meu arquivo node.tpl.php, tenho
print $body;que exibe todos os SKU, atributos, preço, imagem etc.
O problema é que preciso ter isso em um estilo diferente - tenho que trabalhar com um design feito por um designer.Comecei a refazer minha própria versão, usando variáveis como
$node->content['body']['#value']etc.
Tive problemas ao tentar trabalhar com os vários atributos de um produto.Não consigo descobrir como colocá-los em minha página ou qualquer documentação sobre como trabalhar com eles do ponto de vista de um codificador.
Existe uma maneira mais fácil?Onde eu procuraria estilizar a exibição existente (ou seja,a variável $body)?
Editar:meu tema é baseado no tema Zen
Solução
Você vai querer dar uma olhada nos modelos que estarão em um caminho como:
./sites/all/modules/ubercart/uc_product/views
Isso será um começo.É aí que o nó provavelmente será construído.
Outras dicas
Se o problema for puramente de estilo, você pode escrever seu próprio CSS para fazer isso.
Você pode usar o módulo de teatro para lhe dizer quais arquivos de modelo usar, acho que existem alguns que vêm com o ubercart que você pode substituir.Veja a seção de modelo de candidato das informações
Finalmente você pode usar hook_nodeapi op = visualizar para controlar o que realmente entra na página para exibir na variável $body.
Se você usar o módulo Devel, poderá ver a estrutura exata dos arrays e objetos e obter exatamente o que precisa do objeto $node.em seguida, crie um arquivo node-product.tpl.php e substitua a variável $content por essas partes.A maioria desses valores de variáveis tem a marcação intacta.
Se você quiser alterar a marcação, digamos, dos atributos, será necessário alterar a função de pré-processamento que processa o atributo div.Se você simplesmente descartar o id="attributes" (classe talvez?esqueci) div do início e do fim, todos eles serão impressos individualmente em seu próprio wrapper class="attribute".Basta adicionar isso ao seu arquivo template.php.
Você pode então movê-los por toda a página com CSS, em vez de mantê-los todos presos em uma div.
Você também pode usar o método acima de imprimir as variáveis de página separadas para mover os diferentes elementos na marcação.
Muito disso pode ser feito com CSS puro, mas é bom ter uma marcação que não quebre quando o CSS é exibido incorretamente em navegadores ruins.
Espero que isso seja útil.Não tenho certeza se tudo isso funcionará no Drupal 5, já que estava fazendo tudo isso com o 6...então, esperançosamente.
Aqui está um exemplo de uso de hook_nodeapi conforme mencionado por Jeremy French:
/**
* Implements hook_nodeapi().
*/
function YOUR_MODULE_nodeapi(&$node, $op, $arg3 = NULL, $arg4 = NULL) {
switch ($op) {
case 'view':
// Don't show list price unless set.
if (isset($node->content['list_price']) && $node->list_price == 0) {
unset($node->content['list_price']);
}
break;
}
}
Procure uc_product_view() em module/ubercart/uc_product/uc_product.module para ver os vários campos de conteúdo.