回答
你也許可以做到這一點無論是通過一個主題或模塊實現preprocess_page的(THEMENAME_preprocess_page(& $瓦爾)或MODULENAME_preprocess_page(& $瓦爾)),但高於Mac是在觀點正確不知道是空的或不直到他們運行,所以會有性能問題。
在函數,你應該能夠訪問結構化的主要環節陣列,這樣你就可以運行該視圖:
$view = views_get_view('view_name');
// Swap out 'default' for a different display as needed. Also, $args are arguments, and can be left out if not applicable.
$output = $view->preview('default', $args);
if (empty($view->result)) {
// The view has no results, alter the primary links here to remove the link in question.
}
我已經準備好了相互矛盾的任何時刻,因爲我從來沒有實現過類似的事情,但我的印象是,既然意見基本上是對查詢的數據庫,你不能真正知道,如果一個視圖是空的,直到你實際上調用它。
考慮到 - 考慮到您正在談論主鏈接(幾乎顯示在您網站的每個頁面上),這可能會造成嚴重的性能下降,具體取決於視圖的複雜性和「緩存性」。
您還應該考慮是否其他用戶可以在「我們」用戶同時瀏覽網站時更改該視圖的內容:如果視圖在「我們」用戶加載頁面後填充,「我們「用戶永遠不會知道。
至於如何要達到你想要的,請看看接受的答案。
HTH!
使用由於菜單被緩存,hook_menu_alter不會跟上視圖的動態特性。例如,如果在構建菜單路由器時視圖沒有結果,那麼menu_alter的實現將不會添加該項目。然後,如果視圖突然開始返回結果,那麼直到重建菜單纔會將該項目添加到菜單中。 – jhedstrom 2009-12-03 01:42:20
用於指向性能命中的 – dusan 2009-12-03 12:44:02
@jhedstrom - 關於緩存的好處!我很高興「隨時準備好與之相矛盾」!我編輯了原始文章並插入了一行指向您的答案,以便將來的讀者不會感到困惑。 – mac 2009-12-03 12:52:34
我重寫views_embed_view()
只有當有內容提供輸出,然後叫我重寫從主題層:
function mymodule_embed_view($name, $display_id = 'default') {
// handle any add'l args (this hook supports optional params)
$args = func_get_args();
array_shift($args);
if (count($args)) {
array_shift($args);
}
$view = views_get_view($name);
$output = $view->preview($display,$args);
if ($view->result) {
return $output;
}
}
然後在模板文件:
<?php
$view = mymodule_embed_view('view_name');
if (strlen($view) > 0) {
print $view;
}
?>
- 1. 如果任何字段爲空,則隱藏視圖中的行
- 2. 如果集合視圖爲空,則刪除子視圖
- 3. MVC局部視圖隱藏主視圖
- 4. 從視圖列表中隱藏視圖
- 5. 子視圖隱藏表視圖iphone
- 6. 如果父視圖的高度小於某個限制,則隱藏子視圖
- 7. 視圖隱藏tabbarcontroller
- 8. 將鏈接視爲Google即時視圖或動態鏈接視圖的截圖視圖(如何?)
- 9. 隱藏超視圖而不隱藏其子視圖
- 10. 在ConstraintLayout中隱藏從屬視圖時隱藏視圖
- 11. 如果src爲空,則隱藏圖像
- 12. 如果顯示,則以編程方式隱藏視圖。如果它隱藏
- 13. 如果表格爲空,則從視圖中隱藏字段和字段名稱
- 14. Drupal:隱藏視圖以顯示結果?
- 15. 隱藏視圖控制器?
- 16. neteans從視圖隱藏包
- 17. android,SlidingPaneLayout,隱藏主視圖
- 18. 從RecyclerView隱藏視圖
- 19. 隱藏在Lotus Notes視圖
- 20. UICollection視圖隱藏UINavigationBar
- 21. 顯示隱藏視圖
- 22. 顯示/隱藏視圖
- 23. main.xml隱藏視圖幫助
- 24. 應用LayoutParams隱藏視圖
- 25. Appcelerator視圖隱藏動畫
- 26. 長時間隱藏視圖
- 27. Android視圖隱藏,拖動
- 28. 顯示/隱藏子視圖
- 29. openerp搜索視圖隱藏
- 30. MBProgressHUD視圖不隱藏
+1,但有一個附加說法:'$ view-> preview'不僅構建視圖,而且還呈現它,這是不必要的開銷。 '$ view-> execute'也會填充結果屬性,但是會節省額外的處理時間來處理它(它只是構建並運行查詢)。 – 2009-12-03 14:01:37
有用的代碼 - 謝謝:) – MrFidge 2010-12-15 12:01:20