Не работает ajax callback при использовании hook_menu

Главные вкладки

Аватар пользователя Saltan Saltan 27 февраля 2012 в 8:57

Добрый день.
Никак не могу решить, казалось бы, простую задачу.
Делаю вывод новостей с другого ресурса (через парсинг xml). Мне необходимо, чтобы при нажатии на radio-button изменялись новости в форме. Создал простую конструкцию:

function main_page_menu() {
    $items['main.htm'] = array(
        'title' => 'Main',
        'access callback' => TRUE,
        'page callback' => 'drupal_get_form',
                'page arguments' => array ('main_fc_form'),
                'type' => MENU_CALLBACK,
    );
        return $items;
}
function main_fc_form($form, &$form_state) {

  if (!isset($_SESSION['news_type'])) {
          $_SESSION['news_type'] = 1;
  }

  $form['main_news_type'] = array(
    '#title' => t(''),
    '#type' => 'radios',
        '#default_value' => $_SESSION['news_type'],
    '#options' => array(
          1 => 'Главное',
          2 => 'Законодательство, практика',
          3 => 'Привлечение к ответственности',
          4 => 'Обучение, конференции',
          5 => 'Прочие новости о банкротствах',
          ),

    '#ajax' => array(

      'callback' => 'main_fc_ajax',
      'wrapper' => 'fc-form',
          'method' => 'html',
          'effect' => 'fade',  
         
    ),
  );
    $form['main_news_result'] = array(
    '#markup' => main_page_display_current_news(), //функция вывода новостей через темизацию
  );
  return $form;
}

function main_fc_ajax($form, &$form_state) {

  $_SESSION['news_type']=$form_state['values']['main_news_type'];

  return drupal_get_form('main_fc_form'); // здесь я пробовал различные варианты, результат - одинаков.
}

Так вот, в блоке такая конструкция работает (обновляется все нормально), а при использовании hook_menu - не работает.
Я понимаю, что просто "туплю", но не могу понять где. Подскажите пожалуйста ошибку?

Комментарии

Аватар пользователя Saltan Saltan 27 февраля 2012 в 10:17

Все это я уже читал. Но у меня не выходит сделать именно мою проблему, а $_SESSION мне для своих целей нужно.

Аватар пользователя ser_house ser_house 27 февраля 2012 в 10:58

А Вы уверены, что в качестве обертки надо указать fc-form, а не main-fc-form? И не лучше ли будет самому присваивать форме идентификатор либо через preffix-suffix, либо через $form['#id'] = 'my-form-id' (но это так, к вопросу о руке на пульсе)?

Кроме того с методом replace вместо html и возвращать в функции ajax $form (я имею в виду return $form вместо return drupal_get_form('main_fc_form')) будет удобнее, Вам не кажется?

Аватар пользователя xxandeadxx xxandeadxx 27 февраля 2012 в 11:03

"Saltan" wrote:
Все это я уже читал

читайте до просветления

"Saltan" wrote:
а $_SESSION мне для своих целей нужно.

в этом коде $_SESSION не нужно