2016-03-23 2 views
0

Was ist die beste Methode, Entity Field Query zum Suchen mehrerer Felder zu verwenden? Ich habe einen Inhaltstyp namens "Projekte" mit benutzerdefinierten Feldern für "Projektmanager" und "Entwickler", die Verweise auf Benutzer sind, und ich versuche, eine Liste von Projekten anzuzeigen, mit denen ein bestimmter Benutzer in jedem Benutzerprofil verknüpft ist.Die beste Möglichkeit, mehrere Felder mit Entity-Feld-Abfrage zu suchen?

Dies ist, was ich bisher.

<?php 
    // Print all projects associated with this user 
    $profile = user_load(arg(1)); 
    // Check database for reference to this user in pm field 
    $query = new EntityFieldQuery(); 
    $result = $query->entityCondition('entity_type', 'node') 
      ->entityCondition('bundle', 'project') 
      ->propertyCondition('status', 1) 
      ->fieldCondition('<insert multiple fields here..?>', 'target_id', $profile->uid, '=') 
      ->execute(); 


    if (!empty($result['node'])) { 
    $nids = array_keys($result['node']); 
    $nodes = node_load_multiple(array_keys($result['node'])); 
    echo "<b>User's projects:<br></b>"; 
    } 
    // display projects 
    foreach ($nodes as &$node) { 
    $targetPath = "content/"; 
    $targetPath .= str_replace(' ', '-', $node->title); 
    $targetPath = 'http://'.$_SERVER['HTTP_HOST'].base_path().drupal_get_path_alias($targetPath, $path_language = ''); 
    echo "<a href='$targetPath'>$node->title</a><br>"; 
    } 

?> 

Antwort

0

Es scheint, dass Sie Benutzer laden müssen, basierend auf [field_1] oder [field_2] Werte

<?php 
    // Print all projects associated with this user 
    $profile = user_load(arg(1)); 
    // Check database for reference to this user in pm field 
    $query = new EntityFieldQuery(); 
    $result_1 = $query->entityCondition('entity_type', 'node') 
     ->entityCondition('bundle', 'project') 
     ->propertyCondition('status', 1) 
     ->fieldCondition('field_1', 'target_id', $profile->uid, '=') 
     ->execute(); 

    $query = new EntityFieldQuery(); 
    $result_2 = $query->entityCondition('entity_type', 'node') 
     ->entityCondition('bundle', 'project') 
     ->propertyCondition('status', 1) 
     ->fieldCondition('field_2', 'target_id', $profile->uid, '=') 
     ->execute(); 

    $results = array(); 

    // 1st Set 
    if (!empty($result_1['node'])) { 
     $results = array_keys($result_1['node']); 
    } 
    // 2nd Set 
    if (!empty($result_2['node'])) { 
     $results += array_keys($result_2['node']); 
    } 

    if (count($results)) { 
      $nodes = node_load_multiple($results); 
      echo "<b>User's projects:<br></b>"; 

      // display projects 
      foreach ($nodes as &$node) { 
       $targetPath = "content/"; 
       $targetPath .= str_replace(' ', '-', $node->title); 
       $targetPath = 'http://'.$_SERVER['HTTP_HOST'].base_path().drupal_get_path_alias($targetPath, $path_language = ''); 
       echo "<a href='$targetPath'>$node->title</a><br>"; 
      } 
    } 
?> 

auch zu benutzen, denken Sie bitte daran Drupal 7 funktioniert wie l() & t().

Statt:

echo "<a href='$targetPath'>$node->title</a><br>"; 

schreiben:

echo l($node->title, $targetPath)."<br>"; 

Sie werden überrascht sein. :)

Docs:

https://api.drupal.org/api/drupal/includes%21common.inc/function/l/7 https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/t/7

+0

Danke für den Vorschlag .. Sieht gut aus! Aber ich verstehe nicht, warum du zwei getrennte Entity-IDs haben würdest. Ich vergleiche zwei Felder mit der gleichen Benutzer-ID ... –

+0

Ich glaube, Sie brauchen ein 'ODER'. Überprüfen Sie hier: http://drupal.stackexchange.com/questions/14499/using-o--with-entityfieldquery Sie sind möglicherweise besser für das Laden der Benutzer basierend auf den beiden Feld separat, zusammenführen ihre Projekt-IDs & laden Sie sie in einem Rutsch. –

Verwandte Themen