2015-01-16 3 views
0

Так что я хочу, чтобы мой модуль сначала сделал страницу. Но следует ввести ссылку на простую страницу. Я делаю это на Drupal 7. Я создал форму настроек в функции _menu.Динамическое создание ссылки на пользовательскую страницу с помощью модуля Drupal

$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». И тогда try/drupal/об этом дает мне исключение из страницы не найденное.

Может ли кто-нибудь помочь мне в этом? Я надеюсь, что это понятно, что я пытаюсь сделать.

Спасибо за помощь.

Конец, который я хочу сделать, так это то, что мой модуль мог создать в нем страницу с настраиваемым JavaScript. Если бы кто-нибудь мог связать меня с учебником, который был бы хорош для этого, я бы очень признателен этому. Если есть способ, чтобы мой модуль размещал на странице пользовательский JavaScript, который тоже был бы хорош.

ответ

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, которая уже существует.

+0

Это сработало! Единственное, что я должен добавить, это то, что после выполнения части сохранения конфигурации мне пришлось снова очистить кеш. Большое вам спасибо за помощь! :) У вас есть идеи, как я могу автоматизировать это? Чтобы кеш был очищен после сохранения. – DaveLV

+0

'cache_clear_all();' может сделать это в обработчике отправки. Но тогда я думаю, вам придется отходить от автоматизации, предоставляемой 'system_settings_form ($ form);' и писать форму custom для сохранения вашей конфигурации. ** Пользователи DrupalStackExchange **, вероятно, могут дать вам лучший ответ на этот вопрос: –

+0

Спасибо за помощь! :) – DaveLV

Смежные вопросы