2016-08-29 2 views
0

Ich versuche, eine Funktion hinzuzufügen, die den HTML-Code aus einem Feld in drupal Ansichten entfernt. Ich fand eine Funktion für SQL-Server namens "udf_StripHTML", die das tut.Wie HTML aus einem Feld in drupal Ansichten entfernt werden

http://blog.sqlauthority.com/2007/06/16/sql-server-udf-user-defined-function-to-strip-html-parse-html-no-regular-expression/

ich den folgenden Code verwenden:

/** 
* Implements hook_views_query_alter(). 
*/ 
function cviews_views_query_alter(&$view, &$query) { 
    // Add a strip html tags from content. 
    $fields = array('field_data_body.body_value'); 

    foreach ($query->where as $key1 => $value) { 
     foreach ($value['conditions'] as $key2 => $coditions) { 
      if (in_array($coditions['field'], $fields)) { 
      $query->where[$key1]['conditions'][$key2]['field'] = 'dbo.udf_StripHTML(' . $coditions['field'] . ')'; 
     } 
    } 
    } 
} 

Wenn Ansichten Modul die Abfrage Objekt in eine Zeichenfolge konvertiert wird das Feld aus: 'dbo.udf_StripHTML (field_data_body.body_value)' ;

zu. [dbo] [udf_StripHTMLfield_data_body.body_value]

Meine Frage ist, wie kann ich eine Funktion dort hinzufügen?

Danke,

Antwort

3

Sie werden viel zu tief hier Freund. Ich gehe davon aus, dass Sie Drupal 7 verwenden, aber für Drupal 8 sollte dies ähnlich sein (da Sichten im Kern für beide sind).

Ein paar Dinge über Ihren Ansatz:

  • Diese Funktion ist eine benutzerdefinierte Funktion was bedeutet, dass es auf einem viel niedrigeren Niveau definiert werden muss (in der SQL-Datenbank) , bevor Sie Verwenden Sie es in Ihrer Abfrage.
  • Dies ist ein rot-Hering Ansatz ist jedoch, weil Sie die SQL berühren nicht einmal brauchen, um zu erreichen, was Sie wollen (Sie dies mit strip_tags mit PHP zu tun!)
  • Sie brauchen nicht eine Abfrage Ändern Sie hier den Haken (wir müssen dazu nicht in die Datenbank gehen). Sie können dies mit einem der Vorverarbeitung oder Feld Haken von der oder views API mit der Funktion in meinem vorherigen Punkt verbunden tun.
  • Noch besser, Sie müssen nicht einmal den Code berühren, um dies zu erreichen. Sie können es direkt in der Drupal UI tun.

Unter den Feldeinstellungen für die Ansicht, wählen Sie Rewrite und dann Streifen HTML-Tags führt. Presto, keine HTML-Tags in diesem Feld mehr.

Views UI, image source: https://www.drupal.org/node/750172 Bildquelle: https://www.drupal.org/node/750172

+0

Vielen Dank für Ihre Antwort. Ich habe einen Weg gefunden, mein Problem zu lösen. Wenn Sie die Option "HTML-Tags entfernen" aktivieren, werden die HTML-Tags aus dem Feld entfernt und ich muss dies auf dem Filter tun. Also habe ich festgestellt, dass wenn ich Operator "Formel" benutze, ich bekommen kann, was ich will. Hier ist der Code: $ query-> where [$ key1] ['bedingungen'] [$ key2] ['field'] = 'dbo.udf_StripHTML ('. $ Coditions ['field'].")"; $ query-> wobei [$ key1] ['conditions'] [$ key2] ['operator'] = 'formula'; $ query-> wobei [$ key1] ['conditions'] [$ key2] ['value'] = array(); – alysonsm

+1

Okay. Ich bin mir einfach nicht sicher, ohne den Code in Aktion zu sehen. Es scheint mir nur, dass dies machbar wäre, ohne die SQL-Abfrage überhaupt zu berühren (siehe meinen dritten Punkt). Filter können auch in PHP eingestellt werden, ohne die SQL (Google * Filtergruppen in Drupal * oder * ausgesetzt Filter Drupal *) zu berühren. Wie auch immer, es gibt mehr als eine Möglichkeit, eine Katze zu häuten, und wenn es funktioniert, funktioniert es;) Wenn Sie meine Antwort hilfreich finden, können Sie sie bitte als akzeptiert markieren. [Siehe, warum das Annehmen einer Antwort wichtig ist] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

0

Hier ist die Lösung, die für mich gearbeitet:

// Traverse through the 'where' part of the query. 
foreach ($query->where as &$condition_group) { 
    foreach ($condition_group['conditions'] as &$condition) { 

     if (in_array($condition['field'], $fields)) { 
     $value = $condition['value']; 
     $field = $condition['field']; 

     $condition = array(
      'value' => array(), 
      'field' => t('dbo.udf_StripHTML(!field) like \'@value\'', array(
      '!field' => $field, 
      '@value' => $value)), 
      'operator' => 'formula',); 
     } 
    } 
} 
Verwandte Themen