2010-09-20 7 views
4

J'ai vues 2 installé et j'ai créé une vue qui est affiché dans la page d'accueil.Définition d'une vue à un numéro drupal page au hasard

La vue affiche des liens de la page (1 | 2 | 3 | 4 | ... etc). Je veux savoir s'il est possible de démarrer la vue sur une page aléatoire au lieu de toujours commencer à la page 1.

Remarque: Je ne veux pas randomiser l'affichage Je veux juste juste randomiser la page qu'il charge.

Merci

Solution possible:

Dans le crochet views_pre_execute je ceci:

$view->query->pager->set_current_page([random value]); 

Je ne suis pas sûr que je peux déterminer le nombre total de pages dans le téléavertisseur à ce temps, mais je vais continuer à enquêter sur (l'objet de vue $ donné dans le crochet a des tonnes de propriétés avec des tableaux et d'autres objets qui rend ce complexe)

Répondre

2

Je ne sais pas comment faire de l'interface utilisateur de vues, mais vous devriez être en mesure d'atteindre cet objectif en utilisant l'un des the views module hooks, dans ce cas probablement hook_views_pre_execute. Malheureusement, la documentation pour ceux-ci est pratiquement inexistante, vous devez donc implémenter le hook dans un module personnalisé et inspecter l'objet transmis par l'intermédiaire du débogueur (ou des instructions print, var_dump, etc.).

Vous devriez chercher $view->pager['current_page'], que vous pouvez définir à une page au hasard. Malheureusement, si je lis le code correctement, la requête de comptage qui détermine le nombre possible de pages n'est pas encore exécutée à ce stade, donc vous devrez soit utiliser une "meilleure estimation", soit trouver une autre façon de déterminer la plage correcte à sélectionner parmi ...

NOTE: Ceci n'est en aucune façon une réponse "autoritaire" - juste un pointeur où je commencerais à chercher, puisque personne d'autre n'a encore répondu à cette question. Je pourrais bien être manquant une solution plus évidente/facile:/

+0

Hey! J'ai utilisé le hook view_pre_execute et utilisé ceci: $ view-> query-> pager-> set_current_page (); Je l'ai mis au hasard en utilisant la gamme que je connais la vue aura.Je ne suis pas sûr de pouvoir obtenir le nombre exact de pages dans la vue. Merci pour l'aide :) – AntonioCS

2

Une autre option serait de randomiser les entrées de votre point de vue. Ainsi, votre page sera toujours la page 1, mais elle atteint votre objectif de voir quelque chose de différent à chaque fois que vous visitez votre site.

Dans vos critères de tri (dans le groupe global), ajoutez Global: Aléatoire - Aléatoirez l'ordre d'affichage.

(Inspiré par la suggestion à http://mydrupal.com/random_node_or_front_page_in_drupal_like_stumbleupon)

+0

Je connaissais celui-ci, mais je veux juste juste randomiser la vue de la page sélectionnée et non la vue elle-même – AntonioCS

+1

+1 pour une bonne alternative (même si elle ne correspond pas aux exigences exactes OP - pourrait aussi nous aurons ;) –

1

Je viens de créer un téléavertisseur personnalisé qui passe automatiquement à la dernière page et je pense qu'il est lié à ce que votre essaient de faire:

En project.info :

files[] = plugins/views_plugin_pager_last.inc 

En project.module:

function cvoxm_views_plugins(){ 
    return array(
    'pager' => array(
     'last' => array(
     'title' => t('Paged output, full pager and last by default'), 
     'short title' => t('Full & Last'), 
     'help' => t('Paged output, full Drupal style and last by default'), 
     'handler' => 'views_plugin_pager_last', 
     'help topic' => 'pager-last', 
     'uses options' => TRUE, 
    ), 
    ) 
); 
} 

Et le contenu de plugins/views_plugin_pager_last.inc est:

class views_plugin_pager_last extends views_plugin_pager_full { 

    function pre_execute(&$query) { 
    if(!isset($_GET['page'])){ // TODO: Should use pager_id 
     // Go to last page 
     $this->set_current_page($this->get_total_items()/$this->get_items_per_page() - 1); 
     $this->query(); // Rebuild query 
     $this->update_page_info(); // Update info 
    } 
    } 
}