Entsprechend den Angaben in der Dokumentation zu hook_views_query_alter () habe ich eine Datei mit dem Namen erstellt alterform.views.inc
und in ein aktiviertes Modul mit dem Namen eingefügtalterform
. Ich habe den folgenden Code alterform.views.inc
hinzugefügt, aber es funktioniert nicht.
function alterform_views_query_alter(&$view, &$query) {
switch($view->name) {
case 'myViewName':
echo 'test test'; // test
$query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
$query->orderby[1] = "node_title ASC";
break;
}
}
Warum wird "test test" nicht ausgegeben? Was ist los mit meinem Code?
Es wird immer noch kein Test und keine Ansicht ausgegeben. Was ist los mit meinem Code? Danke dir
alterform.views.inc
in Ihr Modul einfügen müssen / müssen, und Sie haben es nicht getan?Antworten:
Recht. Um irgendetwas mit Ansichten in einem Modul "zu tun", müssen Sie hook_views_api implementieren. Ohne diese Option wird Ihr Modul niemals von Views (AFAIK) erkannt.
Bitte ergänzen Sie Ihren Modulcode um:
Dies sollte das Problem beheben, damit Ihr Modul zumindest erkannt wird. Dann können Sie mit dem Debuggen beginnen :)
Eine gute Möglichkeit zum Debuggen einer Ansicht (z. B. eines kleinen Schritts) besteht darin,
dpm($view);
die von Ihnen implementierte Ansichtsfunktion direkt am Anfang zu platzieren. In den meisten Fällen werden dadurch Informationen auf dem Bildschirm angezeigt, anhand derer Sie erkennen können, wo Sie sich gerade befinden. Ich würde vorschlagen, dies mit installiertem / eingeschaltetem devel.module zu tun.Bearbeiten: Dies setzt Views 2 und Drupal 6 voraus. Am besten fragst du herum, ob das nicht deine Waffe ist.
quelle
Sie können 3 Dinge testen:
dpm()
anstelle vonecho()
$view->name
mitdpm()
quelle
Sie müssen die Datei yourmodule.views.inc im Modulverzeichnis ablegen, nicht in einem Unterverzeichnis, oder Views kann sie nicht automatisch abrufen.
quelle
sollte sein
quelle
Wenn Sie ein Verzeichnis für yourmodule.views.inc verwenden, müssen Sie dessen Pfad in der Moduldatei mit einem Code wie dem folgenden angeben:
quelle