Submitted by c.neto on
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 ?
Bonjour,
Permalien Soumis par fvictoire le 26 Novembre, 2014 - 14:18
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;
}
}