Soumis par drugasy le
Bonjour,
Je voudrais savoir comment mettre un region sans bloc dans ma page d'accueil pour le module story, je veux mettre les 2 dernières articles publié sur une region sans bloc, j'ai déjà fait le truc dans http://drupal.org/node/29139 mais çà ne marche toujours pas.
Merci d'avance
Version de Drupal :
Forum :
Salut Drugasy, Pas sûr de
Permalien Soumis par drupalfrance le 2 Avril, 2007 - 15:12
Salut Drugasy,
Pas sûr de comprendre ta question : tu veux créer une région dans laquelle tu affiches les 2 derniers articles publiés, c'est bien ça ?
Pourquoi tu veux que cette région soit "sans bloc" ? Si le bloc en question affiche les 2 derniers articles publiés, on arrive à ce que tu veux non ?
Vincent
Formations Drupal pour WEBMASTERS, DESIGNERS et DÉVELOPPEURS.
Oui mais malheureusement...
Permalien Soumis par drugasy le 2 Avril, 2007 - 15:22
Oui mais, c'est pour mettre sur un emplacement spécifique. si je met un bloc dessus mon template (theme) se transforme (se fractionne)
Donc, si tu affiches un bloc
Permalien Soumis par drupalfrance le 2 Avril, 2007 - 16:30
Donc, si tu affiches un bloc dans ta région, le bloc apparaît comme fractionné ? (désolé de répéter tout ce que tu dis, mais j'essaie de comprendre)
Si par "fractionné", tu veux dire qu'il y a trop d'espaces blancs, tu pourrais probablement résoudre ça avec CSS.
Mais tu dis que tu as utilisé la solution de la page http://drupal.org/node/29139, en principe ça devrait marcher. Peux-tu reproduire ici exactement le code que tu as utilisé (encadré par les balises <php ... ?> et nous dire surtout dans quel fichier/fonction tu as mis ce code ?
Vincent
Formations Drupal pour WEBMASTERS, DESIGNERS et DÉVELOPPEURS.
j'ai fait copier-coller du
Permalien Soumis par drugasy le 2 Avril, 2007 - 17:04
j'ai fait copier-coller du code dans http://drupal.org/node/29139 étape 1 dans region without block et je l'avais mis juste en bas de mon story.module (pas de fonction).
puis dans mon template j'ai fait (j'ai remplacé theme par le nom de mon theme)
function theme_regions() {return array(
'right' => t('right sidebar'),
'left' => t('left sidebar'),
'content' => t('content'),
'header' => t('header'),
'footer' => t('footer'),
'region1' => t('region1')
);
}
function _phptemplate_variables($hook, $variables) {
// Load region content assigned via drupal_set_content().
if ($hook == 'story' && !$vars['teaser']) {
foreach (array('region1', 'region2') as $region)
{
$variables[$region] = drupal_get_content($region);
}
}
return $variables;
}
puis j'ai mis
<?php print $region1 ?>dans mon page.tpl.php et quand je vais dans administration puis block et que j'affecte une catégorie sur cette bloc, çà affiche un bock!!! grrr! or je veux avoir par exemple les 2 ou 5 dernières articles sur cette région.
Je pense que tu confonds
Permalien Soumis par drupalfrance le 2 Avril, 2007 - 19:36
Je pense que tu confonds plusieurs choses différentes : tu dis vouloir afficher une région sans bloc, puis tu vas dans l'admin pour affecter un bloc à une région... c'est contradictoire. :-)
Reprenons dans l'ordre. Il y a 2 grandes étapes pour arriver à ce que tu veux :
La déclaration d'une nouvelle région
Visiblement, cette étape ne te pose pas de pb : il faut effectivement déclarer une fonction
theme_regions()comme tu l'as indiqué, puis rajouter<?php print $region1 ?>(si la région s'appelle region1 bien sûr) danspage.tpl.php.L'affectation de contenu à une région
C'est là que tu dois faire attention :
(En l'occurrence, ton code ne fait ni l'un ni l'autre, tu as dû regarder au mauvais endroit sur la page de drupal.org.)
Voici le code pour mettre en oeuvre la 2e option :
<?phpfunction _phptemplate_variables($hook, $variables) {
// Si je suis sur le point d'afficher une page...
if ($hook == 'page') {
// récupère le contenu du node 80
$content = node_view(node_load(80));
// récupère le contenu du node 148
$content .= node_view(node_load(148));
// affecte le contenu récupéré à la région "region1"
drupal_set_region('region1', $content);
}
return $variables;
}
?>
Dans cet exemple, j'ai indiqué en dur l'ID des nodes que je voulais récupérer mais tu pourrais remplacer ça par une requête SQL qui récupère les X derniers.
Pour conclure, je te conseille de mettre tout ton code dans un fichier
template.php, à créer dans le répertoire de ton thème (sinon, le jour où tu mettras à jour ton site, le code que tu as mis dans story.module sera écrasé).Et puis, j'avais écrit un petit tutoriel sur le sujet qui t'aidera ptêtre à y voir plus clair : Créer de nouvelles régions (comme "en-tête", "barre de gauche"...) dans une page.
Vincent
Formations Drupal pour WEBMASTERS, DESIGNERS et DÉVELOPPEURS.
Bonjour, <?phpfunction
Permalien Soumis par drugasy le 3 Avril, 2007 - 08:59
Bonjour,
<?phpfunction _phptemplate_variables($hook, $variables) {
// Si je suis sur le point d'afficher une page...
if ($hook == 'page') {
// récupère le contenu du node 80
$content = node_view(node_load(80));
// récupère le contenu du node 148
$content .= node_view(node_load(148));
// affecte le contenu récupéré à la région "region1"
drupal_set_region('region1', $content);
}
return $variables;
}
?>
je met çà dans mon template.php ou dans le bloc?
Désolé mais je suis un peu perdu
Qu'est ce que je suis
Permalien Soumis par drugasy le 3 Avril, 2007 - 09:20
Qu'est ce que je suis bête!!!! j'ai pas bien lu le topic dans drupal.org! je me suis tout de suite rendu sur region without block sans compendre le principe! pourtant çà m'a pris 2 mois de réfléxion!
bon, je vais l'essayer et vous donnez le compte rendu.
Sinon, juste 2 questions:
Permalien Soumis par drugasy le 3 Avril, 2007 - 11:51
Sinon, juste 2 questions: "Comment et ou écrire la requête sql?"
j'ai déjà lu http://api.drupal.org/api/4.7/group/database mais le truc ne s'affiche pas .
S'il vous plaît est ce que vous pouvez faire une exemple (la suite de votre code)
Salut Drugasy,
Permalien Soumis par drupalfrance le 3 Avril, 2007 - 12:06
Salut Drugasy,
Je suis un peu perdu en lisant tes questions : tu me demandes d'abord si tu dois mettre le code que je t'ai indiqué dans template.php ou dans le bloc, mais est-ce que cette conversation n'a pas démarré en disant que tu ne voulais PAS de bloc ?
Eh oui, il n'y a PAS de bloc. Le code va donc dans template.php.
Pour la requête SQL qui ramène les nodes, ça va ressembler à quelque chose comme (j'écris ça de mémoire, ce code est à tester) :
<?php
// Récupère les 2 derniers nodes de type "story"
$result = db_query_range(db_rewrite_sql(
"SELECT n.nid FROM {node} n
WHERE n.type = 'story' AND n.status = 1
ORDER BY n.created DESC"), 0, 2);
// Charge le contenu de ces nodes dans la variable $output
$output = '';
while ($o = db_fetch_object($result)) {
$output .= node_view(node_load($o->nid));
}
// Affecte la variable $output à la région "region1"
drupal_set_content('region1', $output);
?>
Il faut mettre ce code à la place de
$content = node_view(node_load(80));dans l'exemple précédent.Il faudra peut-être adapter le code à tes propres besoins : si tu veux plus que 2 nodes, remplace le "2" par le chiffre souhaité. Si tu veux autre chose que les nodes de type "story", remplace "story" dans la requête...
Voilà, tiens-nous au courant.
Vincent
Formations Drupal pour WEBMASTERS, DESIGNERS et DÉVELOPPEURS.