Bộ lọc chế độ xem tùy chỉnh


7

Trong Drupal 8, tôi có một quan điểm tập hợp tất cả các nút được xây dựng trong Gallery Hoursloại nội dung của tôi . Loại nội dung có một trường được gọi là View Ordertôi sử dụng cho chế độ xem khác hiển thị danh sách giờ thư viện theo thứ tự đó. Những gì tôi đang cố gắng làm là xây dựng một khung nhìn khác để kiểm tra giờ trưng bày cho ngày hôm nay. Chẳng hạn, hôm nay là thứ ba, vì vậy tôi muốn khung nhìn hiển thị giờ trưng bày cho thứ ba.

Suy nghĩ của tôi là tạo ra một tùy chọn bộ lọc tùy chỉnh để so sánh giá trị số của một trường, chẳng hạn như trường Xem thứ tự của tôi được đặt thành 1 = Chủ nhật, 2 = Thứ hai, v.v., với DATE_FORMAT(NOW(),"%N"). Đây là bước đột phá đầu tiên của tôi vào việc phát triển mô-đun Drupal tùy chỉnh và đang quay bánh xe của tôi. Bất kỳ và tất cả các đề nghị chào đón.

Một điều tôi nghĩ rằng tôi có chính xác là các tập tin yaml của tôi.

todaydate.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

todaydate.routing.yml

todaysdate:
  defaults:
    _controller: Drupal\todaysdate\Plugin\Filter\todays_date_handler_filter_numeric::operators
  requirements:
    _permission: 'access content'

Nơi tôi thực sự bối rối là nơi để đi từ đó. Tôi đang cố gắng ghép một lớp mở rộng NumericFiltervà thêm một toán tử mới sau đó thêm vào biểu thức WHERE với biểu mẫu ngày tháng mà tôi đang tìm kiếm.

Dù sao, đây là nỗ lực của tôi trong việc tạo bộ lọc. Tôi không nhận được bất kỳ lỗi nào, nhưng tôi cũng không nhận được toán tử mới trên các trường số của tôi trong chế độ xem của tôi.

today_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")');
    }
  }
}

Cảm ơn tất cả các bạn trước cho bất kỳ hỗ trợ bạn có thể cung cấp. Tôi không thể nói cho bạn biết StackOverflow đã giúp tôi bao nhiêu lần trong quá khứ.


Kummerow bạn có thể chấp nhận câu trả lời của @ Gun5m0k3 dưới đây không? Tôi muốn đánh dấu [220129] là một bản sao của câu hỏi này.
Darvanen

@Darvanen, upvote cũng giúp
4k4

Đó là hành động đầu tiên của tôi;)
Darvanen

Câu trả lời:


4

Bạn nên đăng ký bộ lọc tùy chỉnh của mình trong cả mymodule.views.incvà trong các chú thích lớp.

\ Drupal \ mymodule \ Plugin \ lượt xem \ bộ lọc \ MyCustomNumericFilter

<?php

namespace Drupal\mymodule\Plugin\views\filter;

use Drupal\views\Plugin\views\filter\NumericFilter;

/**
 * My custom numeric filter.
 *
 * @ingroup views_filter_handlers
 *
 * @ViewsFilter("my_custom_numeric_filter")
 */
class MyCustomNumericFilter extends NumericFilter {

  public function query() {   
    $this->query->addWhereExpression($this->options['group'], 'DATE_FORMAT(NOW(),"%N")');
  }

  protected 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;
  }

}

mymodule.view.inc (được đặt trong root mô-đun tùy chỉnh)

function mymodule_views_data() {
  $data = [];
  $data['views']['my_custom_numeric_filter'] = [
    'title' => t('My custom numeric filter'),
    'filter' => [
      'title' => t('My custom numeric filter'),
      'group' => 'Custom',
      'help' => t('Provides custom numeric filter.'),
      'id' => 'my_custom_numeric_filter'
    ],
  ];
  return $data; 
}

Tôi đã chuyển biểu thức truy vấn tùy chỉnh của bạn (không kiểm tra) sang query()phương thức vì Lượt xem gọi phương thức này khi lọc.

Hãy cho tôi biết, nếu việc này giúp ích cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.