使用Drupal模块动态创建指向自定义页面的链接

时间:2015-01-16 14:19:14

标签: drupal drupal-modules

所以我希望我的模块首先制作一个页面。但是用户输入的是简单页面的链接。 我在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的页面。如果有人可以将我链接到一个对此很好的教程,我真的很感激。如果我的模块有一种方法可以在页面中放置自定义创建的JavaScript,那也很好。

1 个答案:

答案 0 :(得分:0)

不确定它是否适用于动态路由,但是您在hook_menu()中的第二个链接的变量是错误的。实际上,您指的是YourDrupal/locationUrl而不是示例YourDrupal/about的路线。

将其用于第二个菜单链接(额外检查是否保存设置):

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”会提供已存在的YourDrupal/admin链接。