Message d'avertissement

The subscription service is currently unavailable. Please try again later.

[Résolu] Comment parsser des arguments à une vue dans un block?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Hello

J'ai crée une vue afin de lister les 3 nodes les mieux notés, mais lorsque je mets cette vue dans un block il ne se passe rien, comme si les arguments n'étaient pas envoyés.

Comment faire pour passer mes arguments ?

Merci

Au vue que de ce que tu dis, il semble que tu confondes filtre et argument.
Pour faire ce que tu souhaite, tu dois utiliser les filtres et non pas les arguments.
Les arguments, se passent dans l'URL, et sont récupérés dans la partie "arguments", mais dans ton cas, tu n'en a pas besoin.
Tu crée une vue avec un filtre, puis un critère de trie, et tu dis que tu veux en afficher 3; et ca sera OK.

Hello

Merci pour ta réponse.

Non il s'agissait bien de passer des arguments depuis mon block à ma vue. Au fil de mes lectures je me suis rendu compte qu'une vue dans un block ne réceptionnait pas les arguments.

J'ai alors du insérer du php dans mon argument pour pouvoir avoir mes valeurs :)

Merci

Salut Julien,
Désolé de faire remonter un vieux sujet mais c'est la-dessus que je bosse en ce moment.
Aurais tu le temps d'être un peu plus précis ou de m'indiquer quelques sources bien claires?
Merci!

Bonjour

Effectivement ca fait un bout de temps :)

Tu as alors plusieurs possibilités qui s’offrent à toi.

Développer ton propre module ou alors insérer du php dans la validation de ton bloc.

Je dirais qu'il n'y a pas de règle pour l'utilisation de l'une ou de l'autre solution cela dépend vraiment de ton besoin.

Est-ce que tu peux nous en dire plus sur ce que tu souhaites faire ?

Salut, merci de m'avoir répondu.

J'ai vu un truc sur ton blog hier, mais impossible de retrouver l'adresse pour le moment.

Ce que je souhaite est simple:
- Une page reposant sur une view de type page.
- Autour de cette liste des blocs issus aussi de view.
- Je souhaite passer soit un terme (dont je ne connaitrai ni l'id ni le vocabulaire) soit le type de nœud comme argument en fin d'url et que toutes les views de cette page la prennent en compte.

Pour le moment, pas de problème ça marche très bien avec la vue de type page mais pas avec les blocs

Je sais le faire avec panel mais tout le monde semble mettre le haro sur ce module... Développer un module pourquoi pas s'il le faut, mais ta solution d'insérer du php dans la validation du bloc me semble plus intéressante, en tout cas pour une phase de test.

EDIT: J'ai retrouvé la page de ton blog en question:
http://juliendubreuil.fr/drupal/drupal-ou-comment-passer-des-arguments-a...
Je crois que c'est presque ca mais je ne sais comment adapter ce bout de code dans mon cas. Merci!

Tu peux injecter du Php à la place de l'argument pour faire ton contrôle toi même pour cela clique sur 'Fournir l'argument par défaut' et 'code PHP'

Après tu test ce que tu veux, si tu veux récuperer le premier arguments alors effectue ton test sur arg(0).

Dans cet exemple je test si je suis bien sur le catalogue et que l'agument suivant est un nombre.

if(arg(0)==’catalog’ && is_numeric(arg(1))){
$value=arg(1);
}
return $value;

Sinon apres c'est plus compliqué, il te faut développer ton module. Pour cela tu dois créer le .info et le .module

Utilises la fonction de création de bloc :

function hook_block($op = 'list', $delta = 0, $edit = array()) {

switch($op) {
//déclares tes blocs.
case 'list': {
$blocs=array();
$blocs['bloc1'] = array(
         'info'        =>  t('Mon bloc'),
           'status'          =>  FALSE, 
            'cache'       =>  BLOCK_NO_CACHE,
         'weight'          =>  0,      
);
}
case 'view': {
//Récupération des arguments
//   arg(0),arg(1),...

//Traitement des arguments
        if ($delta == 'bloc1') {
        
           //Nom de la vue
           $viewName ='ma_vue_crée_avec_view';          

         
           //Chargement de la vue
         $view = views_get_view($viewName); 
           //Assignation des paramètres et des arguments
          $view->set_display('default');
            $view->set_arguments(array($arg));
                                     
           //Controle que la vue n'est pas vide (j'ai pas trouvé mieux, si quelqu'un à une meilleur solution que d'ecrire ce texte en cas de retour vide :s)
          if(stristr($view->render(), 'AUCUNE_VALEURE') === FALSE) {                    
               $block['subject'] = $view->display['default']->display_options['title'];
               $block['content'] = views_embed_view($viewName, 'block', $arg);        
           }else{
             return;
            }
      }

}
}

}

Après il va te falloir de la patience pour mettre ca à ta sauce, c'est un exemple rapide.

Bonjour, bonjour

Et bien ca marche et y'a pas de mais, ça marche très bien!

J'ai passé un argument par défaut en php comme tu me le recommandais, j'ai viré la condition et gardé uniquement ca:

$value=arg(1);
return $value;

Et ça marche tout a fait comme je le voulais.

Merci Julien, tu mets fin a trois jours de recherche, et ca me permet d'éviter minipanel!

Bonne journée

Bonjour,

je reviens sur le sujet car je ne comprends pas.
Moi aussi j'ai un bloc (issu d'une vue) qui est affiché sur une vue.

J'ai essayé de passer un argument manuellement à la fin de l'url de ma vue : ma-vue/834 pour afficher le bloc qui est censé retourner du contenu avec cette valeur, mais rien, même pas le message de texte vide.

Autre problème, si ma-vue/834 affichait correctement mon block, comment dire dans le module views que le chemin est ma-vue/id-term ?

Merci de votre aide, ces blocs sont en train de me rendre dingue!

Je fouille dans tous les sens. De plus ne maîtrisant encore pas bien l'api Drupal, ce n'est pas évident avec la taxonomie.

Pourriez-vous éclairer mon chemin, SVP.

Bonjour je remets d'actualité ce sujet car je travaille sur même chose.
Le sujet de discussion est ici :

http://drupalfr.org/forum/support/developpement/29262-trier-les-blocs-pa...

Je veux que ma liste d'articles soit trié par rapport à une taxonomie, j'ai crée un vocabulaire x dont j'ai crée les termes x1, x2...

Ce que je désire c'est dans l'affichage sur le site, par exemple si je clique sur un article de thématique y, sur la page j'ai déjà insérer un bloc de type z et je veux que seuls les articles de thématique y apparaissent.

J'ai suivi ce tuto :

http://drupalfr.org/node/8834

J'aimerai savoir où insérer les codes que mentionnez sur vos posts ?

Merci de votre réponse.