Index: views.install =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/views/views.install,v retrieving revision 1.13 diff -u -F^f -r1.13 views.install --- views.install 24 Apr 2006 02:23:05 -0000 1.13 +++ views.install 20 May 2006 04:21:07 -0000 @@ -314,3 +314,9 @@ function views_update_6() { db_add_column($ret, 'view_tablefield', 'options', 'varchar(255)'); return $ret; } + +function views_update_7() { + $ret = array(); + db_add_column($ret, 'view_view', 'menu_php', 'longtext'); + return $ret; +} Index: views.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/views/views.module,v retrieving revision 1.105 diff -u -F^f -r1.105 views.module --- views.module 24 Apr 2006 02:23:05 -0000 1.105 +++ views.module 20 May 2006 04:21:09 -0000 @@ -303,7 +303,7 @@ function views_menu($may_cache) { // it is still used. $used[$view->name] = true; - if (strrpos($view->url, '$arg')) { + if (strrpos($view->url, '$arg') || $view->menu_php) { $views_with_inline_args[$view->name] = $view; continue; } @@ -332,21 +332,29 @@ function views_menu($may_cache) { if (is_array($views)) { foreach ($views as $view) { - // Do substitution on args. - $view_args = array($view->name); - $menu_path = array(); - foreach (explode('/', $view->url) as $num => $element) { - if ($element == '$arg') { - $menu_path[] = arg($num); - $view_args[] = arg($num); - } - else { - $menu_path[] = $element; - } + $add_menu = TRUE; + if ($view->menu_php) { + ob_start(); + $add_menu = eval($view->menu_php); + ob_clean(); } - $path = implode('/', $menu_path); + if ($add_menu) { + // Do substitution on args. + $view_args = array($view->name); + $menu_path = array(); + foreach (explode('/', $view->url) as $num => $element) { + if ($element == '$arg') { + $menu_path[] = arg($num); + $view_args[] = arg($num); + } + else { + $menu_path[] = $element; + } + } + $path = implode('/', $menu_path); - _views_create_menu_item($items, $view, $path, $view_args); + _views_create_menu_item($items, $view, $path, $view_args); + } } } } @@ -786,7 +794,7 @@ function _views_is_cacheable(&$view) { * Provide all the fields in a view. */ function _views_view_fields() { - return array('vid', 'name', 'description', 'access', 'page', 'page_title', 'page_header', 'page_header_format', 'page_footer', 'page_footer_format', 'page_empty', 'page_empty_format', 'page_type', 'use_pager', 'nodes_per_page', 'url', 'menu', 'menu_tab', 'menu_tab_default', 'menu_tab_weight', 'menu_title', 'block', 'block_title', 'block_use_page_header', 'block_header', 'block_header_format', 'block_use_page_footer', 'block_footer', 'block_footer_format', 'block_use_page_empty', 'block_empty', 'block_empty_format', 'block_type', 'nodes_per_block', 'block_more', 'url', 'breadcrumb_no_home', 'changed', 'query', 'countquery', 'view_args_php'); + return array('vid', 'name', 'description', 'access', 'page', 'page_title', 'page_header', 'page_header_format', 'page_footer', 'page_footer_format', 'page_empty', 'page_empty_format', 'page_type', 'use_pager', 'nodes_per_page', 'url', 'menu', 'menu_tab', 'menu_tab_default', 'menu_tab_weight', 'menu_title', 'block', 'block_title', 'block_use_page_header', 'block_header', 'block_header_format', 'block_use_page_footer', 'block_footer', 'block_footer_format', 'block_use_page_empty', 'block_empty', 'block_empty_format', 'block_type', 'nodes_per_block', 'block_more', 'url', 'breadcrumb_no_home', 'changed', 'query', 'countquery', 'view_args_php', 'menu_php'); } /** Index: views_ui.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/views/views_ui.module,v retrieving revision 1.7 diff -u -F^f -r1.7 views_ui.module --- views_ui.module 24 Apr 2006 02:23:05 -0000 1.7 +++ views_ui.module 20 May 2006 04:21:11 -0000 @@ -854,6 +854,18 @@ function _views_view_form($view, $op = ' '#maxlength' => 255, '#description' => t('Enter the title to use for the menu entry or tab. If blank, the page title will be used.'), ); + $form['page-info']['menu-info']['menu_php_fs'] = array( + '#type' => 'fieldset', + '#title' => t('Menu Handling Code'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form['page-info']['menu-info']['menu_php_fs']['menu_php'] = array( + '#type' => 'textarea', + '#title' => t('Menu Code'), + '#default_value' => $view->menu_php, + '#description' => t('This code will return a true or false to determine if the menu is going to be displayed.'), + ); // block info