2014-10-08 38 views
0

我有一個簡單的內容類型,每個內容類型都有一個「父」字段。該父字段由每個其他關聯內容類型中的實體引用顯示。如果存在父級內容類型,則可以將這些其他內容類型與它關聯。路徑別名與內容ID的上下文過濾器問題

使用視圖,我有頁面顯示「筆記」的所有結果,例如。 Notes創建新筆記時,必須選擇筆記與其關聯的父項。所以每個音符都有一個父母。

我一直在試圖通過像這樣的URL表現出一定的父的所有音符(我有pathauto和別名設置):

committees/parent/notes 

使用上下文過濾器和實體引用(父)我試圖根據父上下文顯示這些筆記。我有以下關係:實體引用:父和上下文過濾器(從field_parent引用的內容實體)內容:父。當我在自動預覽區域中預覽時,沒有任何顯示。例如,父級名稱是「fire」,我將其輸入到預覽上下文過濾器中,不顯示任何內容。

我有它設置像這樣:

當過濾器值在URL不是:

經過提供默認值

類型:從URL原始值(網址爲委員會/父/筆記)

路徑組件:2(父)

經過 - 使用路徑別名

當過濾器值在URL或默認提供:

經過 - 指定驗證標準

選擇 - 驗證:PHP代碼

PHP驗證碼:**

$handler->argument = str_replace("-"," ",$argument); 
return true; 

但是使用上下文過濾器(從field_parent引用的內容實體)Content:Nid然後放入父節點id(在這種情況下爲fire),我可以看到特定父節點id(與fire只是nid相同)的「fire」的註釋。這正是我想要的。

我在這裏丟失了什麼,父母在URL中被引用並顯示基於該父代的備註?爲什麼NID工作,而不是在URL中找到的父母?

+0

[Here](http://drupal.stackexchange.com/questions/46031/how-to-use-node-title-or-path-alias-instead-of-node-id-in-node-reference -context)被討論併爲我工作。 – 2016-07-25 11:13:32

回答

0

引用drupal 7時使用nid作爲引用。在你的情況下,你應該在URL中使用nid或從父別名中找到nid。 對於後者,你可以使用drupal_get_normal_path()函數返回節點/ NID路徑,然後提取NID在你的PHP過濾器像

$normalpath = drupal_get_normal_path($alias) 
$parts=explode('/', $normalpath);   
$nid=$parts[1]; 
+0

感謝您的回覆。因此,使用Content NID引用父級作爲上下文過濾器並提供默認類型:來自URL的內容ID?然後將上述添加到驗證標準區域?返回TRUE;最後? – jasonflaherty 2014-10-08 20:00:00

+0

我認爲你應該使用「當過濾器值不在URL中」,「提供默認值」,「類型:PHP代碼」,然後使用上面的代碼從URL獲取nid並將其返回給視圖。 – geoandri 2014-10-08 20:15:42

+0

它返回的NID結果很好,類似於我使用URL中的Content ID,但是,如果我使用別名,它不會返回結果。 – jasonflaherty 2014-10-08 20:19:11

0

與此代碼嘗試使用

當過濾器值在URL或默認提供:

$np = explode('/', drupal_get_normal_path($argument)); 
if (!empty($np[1])) { 
$handler->argument = $np[1]; 
return TRUE; 
} else { 
return FALSE; 
} 

檢查this