2 Stimmen

Drupal-Knoten aus der Suche ausblenden

Ich habe einen privaten Abschnitt auf einer Drupal-Website erstellt, indem ich ein Modul geschrieben habe, das die REQUEST_URI für den Abschnitt sowie die Benutzerrolle überprüft. Das Problem, dem ich jetzt begegne, ist, wie man verhindern kann, dass diese Knoten/Ansichten in der Suche angezeigt werden.

Die Inhaltstypen, die im privaten Abschnitt verwendet werden, werden an anderen Stellen auf der Website verwendet.

Wie kann man am besten erreichen, dass die Drupal-Suche den Inhalt ignoriert/nicht indiziert/diesen nicht in den Suchergebnissen anzeigt?

3voto

mac Punkte 40526

Es gibt einen wunderbaren Artikel, der genau dies auf der lullabot website erklärt.

Es lohnt sich auch, die Kommentare zu dem Beitrag zu lesen, weil die Leute dort auch alternative Möglichkeiten vorgeschlagen haben, dies auch durch die Verwendung von Contrib-Modulen (anstatt das Implementieren von Hooks in Ihrem eigenen Code). Der Code für D6 ist ebenfalls in den Kommentaren enthalten.

Hoffe das hilft!

0 Stimmen

Schön zu hören... dann viel Spaß beim Codieren! ;)

1voto

cdonner Punkte 35735

Der Lullabot-Artikel ist etwas veraltet und enthält viele direkte Ansätze. Er enthält auch die Antwort in den Kommentaren - das Search Restrict-Modul, das für DP6 funktioniert und eine fein abgestimmte und rollenbasierte Steuerung ermöglicht. Alles andere verhindert entweder, dass Inhalte indiziert werden, was möglicherweise nicht wünschenswert ist, wenn es unterschiedliche Zugriffsebenen auf Inhalte gibt, oder beeinflusst alle Suchanfragen gleichermaßen, was auch nicht funktioniert, wenn es unterschiedliche Zugriffsebenen gibt.

0voto

DilbertDave Punkte 3308

Wenn die im Abschnitt "Private" verwendeten Inhaltstypen auch anderswo verwendet werden, wie hoffen Sie, sie aus den Suchergebnissen herauszufiltern (beachten Sie, dass ich den Lullabot-Artikel von Mac noch nicht gelesen habe).

Im Grunde genommen, wenn Sie sich die Details von zwei Knoten ansehen, einen privaten und einen öffentlichen, was unterscheidet sie?

Hinweis: Ich gehe davon aus, dass Sie möchten, dass die Knoten für Benutzer mit Zugriff auf den privaten Bereich angezeigt werden, aber nicht für "anonyme" Benutzer.

0 Stimmen

Was sie unterscheidet, ist der URL-Pfad und möglicherweise wo sie im Menü sind. Ich bin nicht dagegen, eine Taxonomie hinzuzufügen, die nur ein 'privat'-Tag enthält, wenn es mich dorthin bringt.

0 Stimmen

Ich sehe - Sie möchten die Ergebnisse basierend darauf begrenzen, wo sich der Benutzer im System befindet. Wenn sie sich im privaten Bereich befinden, werden diese Knoten eingeschlossen, nicht jedoch wenn sie außerhalb sind. Wenn das der Fall ist, könnte der Lullabot-Artikel Sie (auf den ersten Blick) dorthin bringen.

0voto

Für Drupal 7. Sie können den Knoten aus den Suchergebnissen ausblenden, indem Sie ein benutzerdefiniertes Feld verwenden. In meinem Fall habe ich ein benutzerdefiniertes Feld mit dem Namen Archive für den gewünschten Inhaltstyp erstellt und mit Hilfe dieses benutzerdefinierten Feldes können Sie die Funktionalität my_module_query_alter schreiben.

Code

function my_module_query_alter(QueryAlterableInterface $query) {
 $is_search = $is_node_search = FALSE;
 $node_alias = FALSE;
 foreach ( $query->getTables() as $table ) { 
   if ( $table['table'] == 'search_index' || $table['table'] == 'tracker_user') {
     $is_search = TRUE;
   }
   if ( $table['table'] == 'node' || $table['table'] == 'tracker_user') {
     $node_alias = $table['alias'];
     $is_node_search = TRUE;
   }
 }

 if ( $is_search && $is_node_search ) {
   $nids = [];
   // Führen Sie eine Entitätsfeldabfrage aus, um Knoten abzurufen, die 'von der Öffentlichkeit unterdrückt sind'.
   $efq = new EntityFieldQuery();
   $efq->entityCondition('entity_type', 'node')
     ->fieldCondition('field_archive', 'value', 1, '=');
   $result = $efq->execute();
   if ( isset($result['node']) ) {
     $nids = array_keys($result['node']);
   }
   if ( count($nids) > 0 ) {
     $query->condition(sprintf('%s.nid', $node_alias), $nids, 'NOT IN');
   }
 }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X