首頁>Web>source

大約6个月以来,我一直在試圖理解上下文過濾器,這是我的頭撞墙,所以我想我会放棄並最终問.最近,我讀了這篇關於配置上下文過濾器的文章,這再次使我對這个话题感到困惑和沮丧

通常在查詢或過程語言中,当您過濾某些內容時,需要指定2或3个內容;

  1. 要過濾的值(例如"金發")
  2. 查詢值的位置(例如"頭發颜色"列)
  3. (可選)要使用的運算符。

我的理解是上下文過濾器仅使用"等於"運算符,因此將省略3。

例如,如果我想過濾一个 nodes 值在 title中的所有节點上的表 列等於 my_title的內容 變數,那麼在SQL中,我会寫這樣的东西;

SELECT * FROM nodes WHERE title = @my_title

有一个左侧(標题)和一个右侧(my_title).但在视圖的"上下文视圖"部分中,我只能選擇要檢查的動態值(相当於 my_title ),但是我该在哪裏選擇實際要過濾的內容(即標题列)?

据我所知,這是告诉過濾器根据当前頁面的ID进行過濾.哪个很好,但是我要過濾什麼? 過濾操作的左手運算符和右手運算符是什麼?

最新回復
  • 5月前
    1 #

    通常来說,视圖用於顯示實體列表的資料.视圖過濾器用於過濾實體以仅顯示特定的實體.上下文過濾器用於根据URL中傳遞的值過濾實體。

    例如,Drupal 8隨附的Files视圖有两頁:一頁的路徑為/ admin / content / files,另一頁的路徑為/ admin / content / files / usage /%

    screenshot

    第二頁顯示其ID的檔案的資料(包含檔案引用的實體的實體標簽和實體型別;管理檔案關係的模組;實體使用檔案的次數).在视圖路徑中傳遞。

    screenshot

    当我在建立的測試站點上訪問/ admin / content / files / usage / 3時,该视圖將顯示以下資料。

    screenshot

    在/ admin / content / files / usage / 2上,该视圖顯示以下資料。

    screenshot

    以另一个示例為例,该預設视圖已在/ admin / structure / views上啟用,因此Taxonomy term视圖在/ taxonomy / term /%上顯示的頁面使用內容:具有分類術語ID上下文過濾器。

    screenshot

    它顯示所有使用分類術語的节點,其ID在URL中傳遞.在我正在使用的測試站點中,/ taxonomy / term / 1顯示了所有使用ID為1(test分類術語)的分類術語的节點,而/ taxonomy / term / 2顯示了所有 使用ID為2(view分類術語)的分類術語的节點。

    screenshot

    screenshot

    上下文過濾器仍然是過濾器,因為它们選擇(或過濾)从中获取資料的實體.區別在於它们的值是从视圖URL获取的,而不是从過濾器條件部分中設置的暴露過濾器之類的形式获取的。

    在實現上下文過濾器的類中,硬編碼了从中获取資料的實體數量以及上下文過濾器處理的實體.Content:具有分類術語ID上下文過濾器顯示来自更多节點的資料(所有使用该分類術語的节點),而Content:ID上下文過濾器顯示来自單个节點的資料 节點(其ID在URL中傳遞)。

  • 5月前
    2 #

    在"视圖"中,如果进入"設置"( /admin/structure/views/settings ),您可以選中 Show the SQL query框 看魔術。

    我對內容非常簡單.這是SQL查詢:

    SELECT node_field_data.created AS node_field_data_created, node_field_data.nid AS nid
    FROM
    {node_field_data} node_field_data
    WHERE node_field_data.status = '1'
    ORDER BY node_field_data_created DESC
    LIMIT 11 OFFSET 0
    

    接下来,我為 Content: ID添加了上下文過濾器 並接受預設設置。

    In this case, the SQL query does not change. 這是因為"顯示指定欄位的所有結果"是 When the filter value is NOT available的預設設置 在上下文過濾器設置中。

    仅当上下文過濾器提供了值時,查詢才会更改. (要提供用於測試目的的虛擬值,您可以在 Preview with contextual filters中輸入一个值 )

    在這裏,我通過輸入 1进行了測試 對於 Preview with contextual filters ,這给了我這个查詢:

    SELECT node_field_data.created AS node_field_data_created, node_field_data.nid AS nid
    FROM
    {node_field_data} node_field_data
    WHERE ((node_field_data.nid = '1')) AND (node_field_data.status = '1')
    ORDER BY node_field_data_created DESC
    LIMIT 11 OFFSET 0
    

    "上下文過濾器"是一个很难理解的名稱,但在Drupal 6中(只要我没記錯的话)就被稱為"引數",對我来說更有意義。

  • wordpress:使用者登錄後需要获取使用者ID
  • wordpress:使用函式中的引數重新定向訪問者(wordPress)