Domanda

Sto lavorando su un sito di Drupal e mi piacerebbe qualche consiglio su questo. Attualmente, un utente inserisce il suo livello per una serie di competenze diverse. Questo è memorizzato in un campo CCK intero e esposto all'utente come widget discesa contenente le coppie di valori / chiave 1 | principiante, 2 | Intermediate, 3 |. Avanzate

In una vista, espongo i valori consentiti per ogni abilità, che vengono presentati all'utente come caselle di controllo (usando il modulo di filtri migliori Exposed) e poi elencato in una tabella ordinabile. In pratica, gli utenti in genere ricerca di persone che hanno "almeno livello di conoscenza X nella abilità Y". Esiste un modulo o semplice modo per visualizzare i valori consentiti come un menu a discesa e utilizzare un "maggiore di" operatore nella query invece di una "una delle"?

Ogni codice di esempio o consigli su come cambiare dinamicamente la logica di filtro o la clausola WHERE della query sarebbe molto apprezzato.

È stato utile?

Soluzione

Si desidera utilizzare hook_views_query_alter () , mentre non ho specificamente alterata la clausola WHERE, ho modificato la clausola SortBy e l'idea alla base di entrambe dovrebbe essere relativamente simile.

Ecco un breve pezzo di codice:

function my_module_views_query_alter(&$view, &$query) {
  switch ($view->name) {
    case 'view1':
      $args = _my_module_get_querystring();
      switch ($args['condition']) {
        case 'condition1':
          $query->where[0]['args'][0] = 1;
          break;

        case 'condition2':
          $query->where[0]['args'][0] = 2;
          break;
      }
      break;
  }
}

/**
 * Returns querystring as an array.
 */
function _my_module_get_querystring() {
  $string = drupal_query_string_encode($_REQUEST, array_merge(array('q'), array_keys($_COOKIE)));
  $args = explode('&', $string);
  foreach ($args as $id => $string) {
    unset($args[$id]);
    $string = explode('=', $string);
    $args[$string[0]] = str_replace(' ', '-', $string[1]);
  }
  return $args;
}

Questo particolare pezzo permetterebbe di modificare la clausola WHERE con una querystring (? Condizione = condizione1), ma si potrebbe modificarlo per ottenere gli argomenti tuttavia si desidera.

Spero che questo aiuti.

Altri suggerimenti

Utilizzando campioni di decifrare e trascorrere qualche ore a leggere e suonare in giro, ho ricevuto un modulo di base che funziona perfettamente per le mie esigenze. Grazie ancora!

Ecco il mio codice, se qualcun altro si imbatte in una simile esigenza:

<?php
// $Id$
/**
* @file
* Module for modifying the views query to change an EQUALS 
* to a GREATER THAN for specific filters.
*/


function views_greater_than_views_query_alter(&$view, &$query) {

//only implement for views that have Search in their name
    if(strstr($view->name, "search")) {

        $whereclauses = $query->where[0]['clauses'];

        foreach ($whereclauses as $i=>$currentrow) {

            $currentrow = str_replace('= %d', '>= %d', $currentrow);    
            $query->where[0]['clauses'][$i] = $currentrow;
    }

    unset($whereclauses);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top