使用 Drupal 模块为自定义页面动态创建 link
Dynamically creating a link to a custom made page with Drupal Module
所以我想让我的模块先做一个页面。但是简单页面的 link 应该是用户输入的。
我在 Drupal 7 上做这个。
我在_menu函数中做了一个设置表单。
$items['admin/config/content/settings'] = array(
'title' => 'Setings',
'description' => 'A form to change settings',
'page callback' => 'drupal_get_form',
'page arguments' => array('settings_form'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
然后我添加了这个:
function settings_form($form, &$form_state){
$form['locationUrl'] = array(
'#type' => 'textfield',
'#title' => t("URL kādu vēlaties?"),
'#description' => t("Example. about"),
'#required' => true
);
return system_settings_form($form);
}
然后我添加到 _menu 功能:
$items[variable_get('admin/config/content/settings','locationUrl')] = array( //this creates a URL that will call this form at "examples/form-example"
'title' => '', //page title
'page callback' => 'DGMap', //this is the function that will be called when the page is accessed. for a form, use drupal_get_form
'access arguments' => array('access simple page'),
);
我补充说:
function page(){
return array('#markup' => '<h1>Hello?</h1>');
}
我都存起来了。清除缓存。然后转到设置并将 locationUrl 保存为例如 'about'。然后尝试 /drupal/about 它给了我页面未找到异常。
有人可以帮我解决这个问题吗?我希望我想做的事情是可以理解的。
感谢您的帮助。
我想做的最后一件事是让我的模块可以创建一个包含自定义 JavaScript 的页面。如果有人可以 link 我找到一个对此非常有用的教程,我将不胜感激。如果我的模块有办法在页面中放置自定义创建的 JavaScript,那也很好。
不确定这是否是动态路由的好方法,但您在 hook_menu()
中的第二个 link 中得到的变量是错误的。事实上,您创建了一条通往 YourDrupal/locationUrl
的路线,而不是您的示例 YourDrupal/about
.
将此用于第二个菜单 link(额外检查是否保存设置):
if (!empty($setting = variable_get('locationUrl', ''))) {
$items[$setting] = array(
'title' => '', //page title
'page callback' => 'page', // use the same name as your pagecallback
// 'access arguments' => array('access simple page'),
'access arguments' => array('access content'), // temporarily use this
);
}
您可能还需要检查现有路线。不确定如果用户使用 locationUrl
保存您的表单会发生什么,例如 "admin" 将 link 给已经存在的 YourDrupal/admin
。
所以我想让我的模块先做一个页面。但是简单页面的 link 应该是用户输入的。 我在 Drupal 7 上做这个。 我在_menu函数中做了一个设置表单。
$items['admin/config/content/settings'] = array(
'title' => 'Setings',
'description' => 'A form to change settings',
'page callback' => 'drupal_get_form',
'page arguments' => array('settings_form'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
然后我添加了这个:
function settings_form($form, &$form_state){
$form['locationUrl'] = array(
'#type' => 'textfield',
'#title' => t("URL kādu vēlaties?"),
'#description' => t("Example. about"),
'#required' => true
);
return system_settings_form($form);
}
然后我添加到 _menu 功能:
$items[variable_get('admin/config/content/settings','locationUrl')] = array( //this creates a URL that will call this form at "examples/form-example"
'title' => '', //page title
'page callback' => 'DGMap', //this is the function that will be called when the page is accessed. for a form, use drupal_get_form
'access arguments' => array('access simple page'),
);
我补充说:
function page(){
return array('#markup' => '<h1>Hello?</h1>');
}
我都存起来了。清除缓存。然后转到设置并将 locationUrl 保存为例如 'about'。然后尝试 /drupal/about 它给了我页面未找到异常。
有人可以帮我解决这个问题吗?我希望我想做的事情是可以理解的。
感谢您的帮助。
我想做的最后一件事是让我的模块可以创建一个包含自定义 JavaScript 的页面。如果有人可以 link 我找到一个对此非常有用的教程,我将不胜感激。如果我的模块有办法在页面中放置自定义创建的 JavaScript,那也很好。
不确定这是否是动态路由的好方法,但您在 hook_menu()
中的第二个 link 中得到的变量是错误的。事实上,您创建了一条通往 YourDrupal/locationUrl
的路线,而不是您的示例 YourDrupal/about
.
将此用于第二个菜单 link(额外检查是否保存设置):
if (!empty($setting = variable_get('locationUrl', ''))) {
$items[$setting] = array(
'title' => '', //page title
'page callback' => 'page', // use the same name as your pagecallback
// 'access arguments' => array('access simple page'),
'access arguments' => array('access content'), // temporarily use this
);
}
您可能还需要检查现有路线。不确定如果用户使用 locationUrl
保存您的表单会发生什么,例如 "admin" 将 link 给已经存在的 YourDrupal/admin
。