使用 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