快轉到主要內容

Drupal 9 Views 分頁器設置首頁顯示不同的條目個數

·372 字·1 分鐘
Y Cheung
作者
Y Cheung
Blogger, Programer & Traveler.

在Drupal Views 中自帶了分頁功能 Pager,可以在界面上自定義每頁要顯示條目個數 Items to display,要跳過的個數 Offset (number of items to skip),總頁數 Number of pages,分頁的標籤 Page Link Labels,指定分頁顯示的個數 Number of pager links visible

Drupal Views Full Pager Options
Drupal Views Full Pager Options

但是如果想要首頁顯示的條目個數與其他不同就還是需要一些代碼來實現,Y Cheung 這裡使用 hook_views_pre_build() 重新安排首頁於非首頁要顯示的條目,用 hook_views_pre_render() 重新計算分頁。

例如,在Views中設置了 Items to display 為 12,那麼渲染出來的結果是首頁顯示11個條目,其餘分頁顯示12個條目。

 1<?php
 2/**
 3 * Implements hook_views_pre_build().
 4 */
 5function custom_module_views_pre_build(ViewExecutable $view) {
 6  if ($view->id() === 'view_id') {
 7    // Page is zero indexed: first page is NULL or 0.
 8    if (!$view->getRequest()->query->get('page')) {
 9      // Default is N, we set it to N-1.
10      $default_items_per_page = $view->getPager()->options['items_per_page'];
11      if ($default_items_per_page) {
12        $items_per_page = $default_items_per_page - 1;
13        $view->setItemsPerPage($items_per_page);
14      }
15    }
16    else {
17      // Set the offset on subsequent pages.
18      $view->setOffset(-1);
19    }
20  }
21}
22
23/**
24 * Implements hook_views_pre_render().
25 */
26function custom_module_views_pre_render(ViewExecutable $view) {
27  if ($view->id() === 'view_id') {
28    $result_count = $view->pager->getTotalItems();
29    $default_items_per_page = $view->pager->options['items_per_page'];
30    if (!$view->getCurrentPage()) {
31      $default_items_per_page += 1;
32    }
33    $default_total_pages = (int) ceil(($result_count + 1) / $default_items_per_page);
34    $view->pager->options['total_pages'] = $default_total_pages;
35    $view->pager->updatePageInfo();
36  }
37}

相關文章

drupal中获取 entity reference field 的 node type 值

·421 字·1 分鐘
标题很拗口我知道…… 用过 entity reference 模组的朋友都知道,这个模组(module)能让你在节点(node)中添加一个 Entity Reference 的字段(Field),可以引用其他的实体(entity)。此次添加引用的是节点。根据需求,须输出节点类型(node type),但是 entity reference 的字段只能输出被引用实体的ID(本例是 nid),所以……

Cross-Origin Resource Sharing (CORS) 跨來源資源共用錯誤解決方法

·932 字·2 分鐘
最近Y cheung 遇到了兩個典型 CORS error問題,XMLHttpRequest 和 Fetch 請求了跨來源資源被瀏覽器阻擋,記錄一下解決方法。 什麼是Cross-Origin Resource Sharing (CORS) 跨來源資源共用? # Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. CORS also relies on a mechanism by which browsers make a “preflight” request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request. In that preflight, the browser sends headers that indicate the HTTP method and headers that will be used in the actual request.

Drupal 9 Twig 獲取field值速查表

·1006 字·3 分鐘
在Drupal 8 和 Drupal 9 的 twig 模板開發中,常常會需要輸出指定的field,本文列出常見類型的field取值方法,以便查詢。 一般類型 General # Field type How to get value Note Boolean {{ content.field_name[0] }} 值為“On”或“Off”的label Boolean {{ content.field_name['#items'][0].value }} 值為1或0 Date {{ content.field_name[0] }} 值為套用time.html.twig模板的完整日期時間html片段 Date {{ content.field_name[0]['#text] }} 值為完整日期時間格式的純文本 Timestamp {{ content.field_name[0] }} 值為完整日期時間格式的純文本 Timestamp {{ content.field_name['#items'][0].value }} 值為時間戳數字 Email {{ content.field_name[0] }} 值為純文本格式 link {{ content.field_name[0]['#url'] }} 值為連結URL link {{ content.field_name[0]['#title'] }} 值為連結文字 數字類型 Number # Field type How to get value Note Number (float) {{ content.field_name[0] }} 顯示有前綴和後綴並number_decimal格式化 Number (float) {{ content.field_name['#items'][0].value }} 顯示未經格式化的浮點數 Number (integer) {{ content.field_name[0] }} 顯示有前綴和後綴 Number (integer) {{ content.field_name['#items'][0].value }} 顯示未經格式化的整數 Number (decimal) {{ content.field_name[0] }} 顯示有前綴和後綴 Number (decimal) {{ content.field_name['#items'][0].value }} 顯示未經格式化的小數 文字類型 Text # Field type How to get value Note Text (formatted) {{ content.field_name[0] }} 帶格式的文本 Text (formatted) {{ content.field_name[0]['#text'] }} 未經html轉化的文本 Text (formatted) {{ content.field_name['#items'][0].value|striptags }} 純文本 Text (formatted, long) {{ content.field_name[0] }} 帶格式的文本 Text (formatted, long) {{ content.field_name[0]['#text'] }} 未經html轉化的文本 Text (formatted, long) {{ content.field_name['#items'][0].value|striptags }} 純文本 Text (formatted, long with summary) {{ content.field_name[0] }} 帶格式的文本 Text (formatted, long with summary) {{ content.field_name[0]['#text'] }} 未經html轉化的文本 Text (formatted, long with summary) {{ content.field_name['#items'][0].value|striptags }} 純文本 Text (formatted, long with summary) {{ content.field_name['#items'][0].summary }} 摘要 Text (plain) {{content.field_name.0 }} 純文本 Text (plain, long) {{content.field_name.0 }} 純文本 列表類型 List # Field type How to get value Note List (float) {{ content.field_name[0] }} 在管理介面Manage Display中設置該欄位顯示值key或標籤label List (float) {{ content.field_name['#items'][0].value }} 顯示值的key List (integer) {{ content.field_name[0] }} 在管理介面Manage Display中設置該欄位顯示值key或標籤label List (integer) {{ content.field_name['#items'][0].value }} 顯示值的key List (text) {{ content.field_name[0] }} 在管理介面Manage Display中設置該欄位顯示值key或標籤label List (text) {{ content.field_name['#items'][0].value }} 顯示值的key 參照類型 Reference # Field type How to get value Note Fiel {{ content.field_name[0] }} 值為套用file-link.html.twig模板的html片段 File {{ file_url(content.field_name[0]['#file'].uri.value) }} 檔案連結 File {{ content.field_name[0]['#description'] }} 檔案描述 Image {{ file_url(content.field_name[0]['#item'].entity.uri.value) }} 圖片連結 Image {{ content.field_name[0]['#item'].value.alt }} 圖片alt文字 Image {{ content.field_name[0]['#item'].value.title }} 圖片title文字 Image {{ content.field_name[0]['#item'].value.height }} 圖片設置的高度 Image {{ content.field_name[0]['#item'].value.width }} 圖片設置的寬度 Taxonomy Term {{ content.field_taxonomy[0]['#options'].entity.id }} 在Manage display中將format設為Label時顯示term id Taxonomy Term {{ content.field_name[0]['#title'] }} 在Manage display中將format設為Label顯示term label Taxonomy Term {{ content.field_name[0]['#url'] }} 在Manage display中將format設為Label顯示term path 媒體類型 Media # 啟用Media模組後出的media field。

獲取最新惡意爬蟲列表配置 Fail2ban Filter

·873 字·2 分鐘
安裝並設置好 Fail2ban 後(可以參考Y Cheung 之前寫的『Fail2ban 配置 Nginx filter』),可以看到在 /etc/fail2ban/filter.d/nginx-badbots.conf 內容如下: 1# /etc/fail2ban/filter.d/nginx-badbots.conf 2# Fail2Ban configuration file 3# 4# Regexp to catch known spambots and software alike. Please verify 5# that it is your intent to block IPs which were driven by 6# above mentioned bots. 7 8[Definition] 9 10badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider|(?:Mozilla/\d+\.\d+ )?Jorgee 11 12badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|Guestbook Auto Submitter|Industry Program 1\.0\.x|ISC Systems iRc Search 2\.1|IUPUI Research Bot v 1\.9a|LARBIN-EXPERIMENTAL \(efp@gmx\.net\)|LetsCrawl\.com/1\.0 \+http\://letscrawl\.com/|Lincoln State Web Browser|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Mac Finder 1\.0\.xx|MFC Foundation Class Library 4\.0|Microsoft URL Control - 6\.00\.8xxx|Missauga Locate 1\.0\.0|Missigua Locator 1\.9|Missouri College Browse|Mizzu Labs 2\.2|Mo College 1\.9|MVAClient|Mozilla/2\.0 \(compatible; NEWT ActiveX; Win32\)|Mozilla/3\.0 \(compatible; Indy Library\)|Mozilla/3\.0 \(compatible; scan4mail \(advanced version\) http\://www\.peterspages\.net/?scan4mail\)|Mozilla/4\.0 \(compatible; Advanced Email Extractor v2\.xx\)|Mozilla/4\.0 \(compatible; Iplexx Spider/1\.0 http\://www\.iplexx\.at\)|Mozilla/4\.0 \(compatible; MSIE 5\.0; Windows NT; DigExt; DTS Agent|Mozilla/4\.0 efp@gmx\.net|Mozilla/5\.0 \(Version\: xxxx Type\:xx\)|NameOfAgent \(CMS Spider\)|NASA Search 1\.0|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|Port Huron Labs|Production Bot 0116B|Production Bot 2016B|Production Bot DOT 3016B|Program Shareware 1\.0\.2|PSurf15a 11|PSurf15a 51|PSurf15a VA|psycheclone|RSurf15a 41|RSurf15a 51|RSurf15a 81|searchbot admin@google\.com|ShablastBot 1\.0|snap\.com beta crawler v0|Snapbot/1\.0|Snapbot/1\.0 \(Snap Shots&#44; \+http\://www\.snap\.com\)|sogou develop spider|Sogou Orion spider/3\.0\(\+http\://www\.sogou\.com/docs/help/webmasters\.htm#07\)|sogou spider|Sogou web spider/3\.0\(\+http\://www\.sogou\.com/docs/help/webmasters\.htm#07\)|sohu agent|SSurf15a 11 |TSurf15a 11|Under the Rainbow 2\.2|User-Agent\: Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1\)|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00 13 14failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$ 15 16ignoreregex = 17 18datepattern = {^LN-BEG}%%ExY(?P<_sep>[-/.])%%m(?P=_sep)%%d[T ]%%H:%%M:%%S(?:[.,]%%f)?(?:\s*%%z)? 19 ^[^\[]*\[({DATE}) 20 {^LN-BEG} 21 22# DEV Notes: 23# List of bad bots fetched from http://www.user-agents.org 24# Generated on Thu Nov 7 14:23:35 PST 2013 by files/gen_badbots. 25# 26# Author: Yaroslav Halchenko 如果沒有找到這個文件,請新建一個,或者將 apache-badbots.conf 拷貝並重命名。