In Drupal 8 habe ich eine Ansicht, in der alle in meinem Gallery Hours
Inhaltstyp erstellten Knoten erfasst werden. Der Inhaltstyp hat ein Feld mit dem Namen View Order
, das ich für eine andere Ansicht verwende, in der die Liste der Galeriezeiten in dieser Reihenfolge angezeigt wird. Ich versuche, eine andere Ansicht zu erstellen, die die Öffnungszeiten der Galerie für heute überprüft. Zum Beispiel ist heute Dienstag, daher möchte ich, dass in der Ansicht die Galeriezeiten für Dienstag angezeigt werden.
Mein Gedanke war, eine benutzerdefinierte Filteroption zu erstellen, die den numerischen Wert eines Felds vergleicht, z. B. mein Feld "Ansichtsreihenfolge", das auf 1 = Sonntag, 2 = Montag usw. festgelegt ist DATE_FORMAT(NOW(),"%N")
. Dies ist mein erster Ausflug in die Entwicklung von benutzerdefinierten Drupal-Modulen und ich drehe meine Räder. Alle Vorschläge sind willkommen.
Das einzige, was ich für richtig halte, sind meine Yaml-Dateien.
todaysdate.info.yml
name: Todays Date Filter module
description: 'Creates a filter to search by todays day of the week.'
type: module
core: 8.x
package: SMA Modules
todaysdate.routing.yml
todaysdate:
defaults:
_controller: Drupal\todaysdate\Plugin\Filter\todays_date_handler_filter_numeric::operators
requirements:
_permission: 'access content'
Ich bin wirklich verwirrt, wohin ich von dort aus gehen soll. Ich versuche, eine Klasse zusammenzusetzen, die das erweitert, NumericFilter
und einen neuen Operator hinzuzufügen, der dann dem WHERE-Ausdruck mit dem von mir gesuchten Datumsformat hinzugefügt wird.
Jedenfalls ist dies mein Versuch, den Filter zu erstellen. Ich erhalte keine Fehler, aber ich erhalte auch nicht den neuen Operator für meine numerischen Felder in meiner Ansicht.
todays_date_handler_filter_numeric.php
<?php
/**
* @file
* Provides views filter option for the Todays Date module.
*/
namespace Drupal\todaysdate\Plugin\Filter;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Drupal\views\Plugin\views\filter\NumericFilter;
use Drupal\views\Plugin\views\filter\InOperator;
class todays_date_handler_filter_numeric extends NumericFilter {
function operators(){
$operators = parent::operators();
$operators += array(
'todays date' => array(
'title' => $this->t('Is this day of the week'),
'short' => $this->t('todays date'),
'method' => 'op_day_of_week',
'values' => 0,
)
);
return $operators;
function op_day_of_week($field) {
$this->query->addWhereExpression($this->options['group'], 'DATE_FORMAT(NOW(),"%N")');
}
}
}
Vielen Dank im Voraus für jede Unterstützung, die Sie leisten können. Ich kann Ihnen nicht sagen, wie oft StackOverflow mir in der Vergangenheit geholfen hat.
Antworten:
Sie sollten Ihren benutzerdefinierten Filter sowohl in
mymodule.views.inc
als auch in den Klassenanmerkungen registrieren .\ Drupal \ mymodule \ Plugin \ views \ filter \ MyCustomNumericFilter
mymodule.views.inc (im benutzerdefinierten Modulstamm platziert)
Ich habe Ihren benutzerdefinierten Abfrageausdruck (ohne Überprüfung) in die
query()
Methode verschoben , da Views diese Methode beim Filtern aufruft.Lassen Sie mich wissen, ob dies für Sie funktioniert.
quelle