query avec views ou hooks_views_pre_execute

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.

Bonjour,

Je voudrais mettre en place un moteur de recherche sur un type de contenu personnalisé.
Ma requête doit comporter cette condition :

début de la requete + ((champ1 = valeur1) OR (champ1 = valeur2 AND champ2 = valeur3))

Il n'est apparemment pas possible de combiner les opérateurs OR et AND.

J'ai parcouru plusieurs forums, consulter des livres mais je n'ai pas trouvé le moyen de le faire avec views UI donc j'ai essayé par le hook pre_execute.

Je construis la requête de type string mais comme la query n'est pas un objet, j'ai une erreur.

Je ne trouve pas de solution à mon problème, pouvez-vous m'aider ?

Forum : 
Version de Drupal : 
Tags : 

Bonjour,
j'étais sur le même problème que vous.
Voici mon code qui peut-être vous aidera :

/**
*  Implements hook_views_pre_execute().
*/
function mymodule_view_views_pre_execute(&$view)
{
    if ($view->name=='planning' and $view->current_display == 'month') {
        $profil_nid = $view->args[0];
        $date = $view->args[1];
        $query = db_select('node', 'th_node');
        $query->addField('th_node','title','node_title' );
        $query->addField('th_node','nid', 'nid');
        $query->addField('th_node','language','node_language');
        $query->addField('dth','field_tranche_horaire_date_value','field_data_field_tranche_horaire_date_field_tranche_horaire_' );
        $query->addField('dth','entity_type', 'field_data_field_tranche_horaire_date_node_entity_type');
        //$query->addField('dth','bundle', 'field_data_field_tranche_horaire_date_bundle');
        //$query->addField('dth','field_tranche_horaire_date_value2', 'field_data_field_tranche_horaire_date_field_tranche_horaire__1');
        //$query->addField('dth','field_tranche_horaire_date_rrule', 'field_data_field_tranche_horaire_date_field_tranche_horaire__2');
        $query->innerjoin('field_data_field_tranche_horaire_date','dth','th_node.nid = dth.entity_id');
        $query->innerjoin('field_data_field_tranche_horaire_nid','thn','th_node.nid = thn.field_tranche_horaire_nid_target_id');
        $query->innerjoin('node','profil_node','thn.entity_id = profil_node.nid');
        $query->where(" (th_node.status = '1') ");
        $query->where(" (profil_node.status = '1')");
        $query->where("( (DATE_FORMAT(ADDTIME(FROM_UNIXTIME(dth.field_tranche_horaire_date_value2), SEC_TO_TIME(3600)), '%Y-%m') >= '".$date."' AND DATE_FORMAT(ADDTIME(FROM_UNIXTIME(dth.field_tranche_horaire_date_value), SEC_TO_TIME(3600)), '%Y-%m') <= '".$date."') )");
        $query->where(" (profil_node.nid = '".$profil_nid."') ");
        $query->orderBy('dth.field_tranche_horaire_date_value');
        $view->build_info['query'] = $query;
  }

}