Nonostante e' quasi un anno che cerco di capire come funziona Drupal sono ancora alle prime armi. Se page.tpl.php e' lo scheletro principale di quello che vediamo a schermo allora il contenuto del settore content e barre laterali (regioni) saranno fornite e organizzata dal node.tpl.php e da block.tpl.php. (barre laterali) .....Nell'area content della page.tpl.php dovrebbe andare il contenuto organizzato dal nodo.tpl.php ma non vedo nel nodo.tpl.php (tema Genesis) nessun riferimento alla funzione $content....mi chiedevo come fa dupral a mettere il contentenuto del nodo nella regione content? Tx
Come vengono visualizzati i nodi nel content di page.tpl.php
Non ho provato, ma credo che quello che ha scritto John non sia completamente corretto: dovrebbe essere tecnicamente possibile avere un tema senza node.tpl.php, dato che viene usato quello fornito in /modules/node
L'errore a John usciva perché ha rinominato il file ma non ha aggiornato il theme registry, che andava quindi a cercare lì il file col nome corretto.
Confermo quanto detto da Pinolo. Dopo la pulizie delle cache, ha usato node.tpl.php in modules/node - quindi "the party goes on"... (Ma dico, c'è qualcosa che quel uomo non sa? Tipo la velocità terminale di un rondine senza carico? Hint: http://www.style.org/unladenswallow/)
Infatti, ricordavo che di fatto potrei omettere node.tpl.php che in ogni caso in caso di necessità usa quello di Default come accade con Block.tpl.php?
Mi pare che i file essenziali per il funzionamento di un tema sono solo page.tpl.php e il nometema.info, il resto se no c'è usa quello di default.
per quanto riguarda epulone puoi inserire quella stringa che ti ho indicato in qualsiasi punto del file node.tpl.php tanto ti genererà della roba che non può essere themizzata, ma ti serve solo per vedere come è formato l'oggetto che che viene passato al file node.tpl.php, in realtà è più complesso di questa spiegazione, ma penso che per il momento puoi vederla da questo punto di vista.
in particolare preprocess_node() che a partire dall'oggetto "nodo" che gli viene passato genera le "variabili" che vedi stampate in node.tpl.php
<?php
print $node_id;
print $classes;
print $node_url;
print $title;
print $unpublished;
print $submitted;
print $picture;
print $content;
print $terms;
print $links;
?>
.... e quindi queste variabili:
(print $node_id; print $classes; print $node_url; print $title; print $unpublished; print $submitted; print $picture; print $content; print $terms; print $links;)
come vengono passate alla page.tpl.php (di seguito)? O meglio, nel content di page.tpl.php ?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">
<head>
<?php print $head; ?>
<title><?php print $head_title; ?></title>
<?php print $styles; ?>
<?php print $scripts; ?>
</head>
<?php
/**
* Change the body id selector to your preferred layout, e.g body id="genesis-1a".
* @see layout.css
*/
?>
<body id="genesis-1b" <?php print $section_class; ?>>
<div id="container" class="<?php print $classes; ?>">
<div id="skip-nav">
<a href="#main-content"><?php print t('Skip to main content'); ?></a>
</div>
<?php if ($leaderboard): ?>
<div id="leaderboard" class="section region"><div class="region-inner">
<?php print $leaderboard; ?>
</div></div> <!-- /leaderboard -->
<?php endif; ?>
<div id="header" class="clear-block">
<?php if ($site_logo or $site_name or $site_slogan): ?>
<div id="branding">
<?php if ($site_logo or $site_name): ?>
<?php if ($title): ?>
<div class="logo-site-name"><strong>
<?php if ($site_logo): ?><span id="logo"><?php print $site_logo; ?></span><?php endif; ?>
<?php if ($site_name): ?><span id="site-name"><?php print $site_name; ?></span><?php endif; ?>
</strong></div>
<?php else: /* Use h1 when the content title is empty */ ?>
<h1 class="logo-site-name">
<?php if ($site_logo): ?><span id="logo"><?php print $site_logo; ?></span><?php endif; ?>
<?php if ($site_name): ?><span id="site-name"><?php print $site_name; ?></span><?php endif; ?>
</h1>
<?php endif; ?>
<?php endif; ?>
<?php if ($site_slogan): ?>
<div id="site-slogan"><?php print $site_slogan; ?></div>
<?php endif; ?>
</div> <!-- /branding -->
<?php endif; ?>
<?php if ($search_box): ?>
<div id="search-box"><?php print $search_box; ?></div> <!-- /search box -->
<?php endif; ?>
<?php if ($header): ?>
<div id="header-blocks" class="section region"><div class="region-inner">
<?php print $header; ?>
</div></div> <!-- /header-blocks -->
<?php endif; ?>
</div> <!-- /header -->
<?php if ($primary_menu or $secondary_menu): ?>
<div id="nav" class="clear-block">
<?php if ($primary_menu): ?>
<div id="primary"><?php print $primary_menu; ?></div>
<?php endif; ?>
<?php if ($secondary_menu): ?>
<div id="secondary"><?php print $secondary_menu; ?></div>
<?php endif; ?>
</div> <!-- /nav -->
<?php endif; ?>
<?php if ($breadcrumb): ?>
<div id="breadcrumb" class="nav"><?php print $breadcrumb; ?></div> <!-- /breadcrumb -->
<?php endif; ?>
<?php if ($secondary_content): ?>
<div id="secondary-content" class="section region"><div class="region-inner">
<?php print $secondary_content; ?>
</div></div> <!-- /secondary-content -->
<?php endif; ?>
<div id="columns"><div class="columns-inner clear-block">
<div id="content-column"><div class="content-inner">
<?php if ($mission): ?>
<div id="mission"><?php print $mission; ?></div> <!-- /mission -->
<?php endif; ?>
<?php if ($content_top): ?>
<div id="content-top" class="section region"><?php print $content_top; ?></div> <!-- /content-top -->
<?php endif; ?>
<div id="main-content">
<?php if ($title): ?><h1 id="page-title"><?php print $title; ?></h1><?php endif; ?>
<?php if ($tabs): ?>
<div class="local-tasks"><div class="clear-block">
<?php print $tabs; ?>
</div></div>
<?php endif; ?>
<?php if ($messages): print $messages; endif; ?>
<?php if ($help): print $help; endif; ?>
<div id="content" class="section region">
<?php print $content; ?>
</div>
</div> <!-- /main-content -->
<?php if ($content_bottom): ?>
<div id="content-bottom" class="section region"><?php print $content_bottom; ?></div> <!-- /content-bottom -->
<?php endif; ?>
</div></div> <!-- /content-column -->
<?php if ($left): ?>
<div id="sidebar-left" class="section sidebar region"><div class="sidebar-inner">
<?php print $left; ?>
</div></div> <!-- /sidebar-left -->
<?php endif; ?>
<?php if ($right): ?>
<div id="sidebar-right" class="section sidebar region"><div class="sidebar-inner">
<?php print $right; ?>
</div></div> <!-- /sidebar-right -->
<?php endif; ?>
</div></div> <!-- /columns -->
<?php if ($tertiary_content): ?>
<div id="tertiary-content" class="section region clear-block"><div class="region-inner">
<?php print $tertiary_content; ?>
</div></div> <!-- /tertiary-content -->
<?php endif; ?>
<?php if ($footer or $footer_message): ?>
<div id="foot-wrapper" class="clear-block">
<?php if ($footer): ?>
<div id="footer" class="section region"><div class="region-inner">
<?php print $footer; ?>
</div></div> <!-- /footer -->
<?php endif; ?>
<?php if ($footer_message or $feed_icons): ?>
<div id="footer-message"><?php print $footer_message; ?><?php print $feed_icons; ?></div> <!-- /footer-message/feed-icon -->
<?php endif; ?>
</div> <!-- /footer-wraper -->
<?php endif; ?>
</div> <!-- /container -->
<?php print $closure ?>
</body>
</html>
TX
Magari se forse così. Invece quei variabile per node.tpl.php non esistono più quando arrivi a page.tpl.php, e sono tutti stato convertiti in HTML - che trovi in $content.
Un esperimento interressante è di 'vedere' cosa viene temizzato e quando. In includes/theme.inc:581, dopo
$hook = array_shift($args);
aggiungi
print("Drupal theme() ". $hook .': '); print_r($args); print("\n");
E se usi anche views, in sites/all/modules/views/handlers:590, dopo
function theme($values) {
aggiungi
print("Views theme(): "); print_r($this); print_r($values); print("\n");
Ovviamente produce un sacco di informazione, ma si vede l'ordine abbastanza bene. (Bisogna guardare il sorgente della pagina):
Drupal theme() markup: Array
(
[0] => Array
(
[#weight] => -4
[#value] => <p>
This is the ninth page...</p>
[#title] =>
[#description] =>
)
)
Drupal theme() fieldgroup_fieldset: Array
(
[0] => Array
(
[#parents] => Array
(
)
[#collapsible] =>
[#collapsed] =>
[#value] =>
[#tree] =>
[#required] =>
[#description] =>
[#type] => fieldgroup_fieldset
[#attributes] => Array
(
[class] => fieldgroup group-left-text
)
[#title] => Left Text
)
)
Drupal theme() markup: Array
(
[0] => Array
(
[#type_name] => page
[#context] => teaser
[#group_name] => group_left_text
[#post_render] => Array
(
[0] => fieldgroup_wrapper_post_render
)
[#weight] => -3
[group] => Array
(
[#parents] => Array
(
)
[#collapsible] =>
[#collapsed] =>
[#value] =>
[#tree] =>
[#required] =>
[#description] =>
[#type] => fieldgroup_fieldset
[#attributes] => Array
(
[class] => fieldgroup group-left-text
)
[#title] => Left Text
[#printed] => 1
)
[#title] =>
[#description] =>
)
)
Ecc, ecc, ecc...
il file node.tpl.php non deve o comunque non è dovuto a contenere la variabile $content, bensì deve contenere le variabili relative al nodo. Infatti questo file si occupa di dare un template al nodo, non alla pagina, poi se in un caso particolare la pagina è per lo più composta da un contenuto di tipo nodo allora il grosso del lavoro sarà fatto anche da node.tpl.php.
per sapere quali variabili in lnea teoria hai accesso dal node.tpl.php prova a inserire in quel file
vedrai tutto l'oggetto node printato a schermo...
Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.
WeBrain Solution | Pillsofbits Of Bits
E' node.tpl.php stesso che è risponsabile per creare il contenuto di
$content
in page.tpl.php.Più imparo, più dubito.
Grazie....
per capire meglio provo a fare un'altra domanda: senza node.tpl.php come verrebbe visualizzata per es. una storia nella page.tpl.php?
Perche' il nodo formatta ad esempio una storia e la rimanda con una funzione php all'area della page.tpl.php designata a visualizzarla che di solito e' il content...giusto? La funzione $content contiente tutta la formattazione del nodo.tpl.php? Tx
Provare per credere...
Rinominato node.tpl.php in org-node.tpl.php e viene fuori una scatola grossa di colore rosso contente il messaggio:
Che sorpresa ;-) No node.tpl.php - no party.
Quasi. La funzione si chiama
template_preprocess_node()
(vedi modules/node/node.tpl.php),$content
contiene HTML - il risultato di aver eseguito node.tpl.php.Più imparo, più dubito.
quoto :D
Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.
WeBrain Solution | Pillsofbits Of Bits
Grazie jhl.verona
In effetti nel nodo.tlp.php di genesis ho trovato:
ma sono messi solo come commento, mi sbaglio? Ecco il resto:
Se volessi seguire il consiglio di Kiuz (che ringrazio) cioe' quello d'inserire questo codice:
per visionare nel content della page.tpl.php solo la funzione che voglio analizzare come faccio? Dove lo metto il codice? Tx