Вывести в form_alter другую функцию

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

Аватар пользователя dancermanz dancermanz 24 января 2013 в 13:30

Здравствуйте. Прошу помощи. Пишу модуль, который изменяет данные на страницу корзины:

<?phpfunction MYMODULE_form_alter(&$form, $form_state, $form_id){

        
$i = 0;
    if($form_id =='uc_cart_view_form'){    
        for($i = 0;isset($form['items'][$i]['nid']) ;$i++)
        
        {
        $form['items'][$i]['total']['#value'] = 0; 
        $form['items'][$i]['price_item']['#value'] = 0;
        
    }    
}
}?>

Вопос №1: сделал через цикл for, а не foreach, потому что $form пишет , что это не массив. Хотя через devil показывает, что массив. Почему так?

Вопрос №2: Как можно использовать функцию с другого модуля в этом хуке:

<?phpfunction uc_multiple_currency_nodeapi(&$node, $op) {
  if ($op == 'load') {
     $from = variable_get('uc_currency_code',1);
     if(!isset($_SESSION['currency_type'])){
     $_SESSION['currency_type'] = variable_get('uc_currency_code',1);
     $currency_type=$_SESSION['cu=rrency_type'];

    }
    else{
       $currency_type = $_SESSION['currency_type'];
    }
  $to = $currency_type;
  $amt = $node->sell_price;
  $ret = currency_api_convert($from, $to, $amt);
  if ($ret['status'] == FALSE) { 
  }
  else {
    $rusd = $ret['value'];
  }
    $node->content['display_usd_price'] = array( 
     '#value' => '<div class="uc-display-usd-price">'. t("!price", array('!price' =>$rusd)) .'</div>',
     '#value2' => '<div class="uc-display-usd-price">'. t("!price", array('!price' =>$currency_type)) .'</div>',
     '#access' => $enabled['display_usd_price'],
     '#weight' => $weight['sell_price'],
    );
  }
}?>

а конкретно вот эту <?php $ret currency_api_convert($from$to$amt);?>

которая идет с модуля currency_api:

<?phpfunction currency_api_convert($currency_from, $currency_to, $amount = 1, $decimals = NULL) {
  $currency_array = array(
    's'  => 'Currencies',
    'l1' => 'Last',
    'd1' => 'Date',
    't1' => 'Time'
  );

  $result = array();
  $result['status'] = FALSE;
  $result['message'] = NULL;
  $result['value'] = 0;
  $result['rate'] = 1.0;
  $result['timestamp'] = NULL;
  $result['date'] = NULL;
  $result['time'] = NULL;

  $from = drupal_strtoupper($currency_from);
  $to   = drupal_strtoupper($currency_to);

  if ($from == $to) {
    return array(
      'status' => TRUE,
      'message' => 'success',
      'value' => $amount,

      'rate' => 1.0,
      'timestamp' => time(),
      'date' => date('n/j/Y'),
      'time' => date('g:ia'),
    );
  }
?>

Комментарии

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 24 января 2013 в 15:25

Вопос №1: сделал через цикл for, а не foreach, потому что $form пишет , что это не массив.

именно масив, как раз сечас этим и занимаюсь

пример,установить для элементов вес

<?php    
   $i 
0;
    foreach (
element_children($form) as $element) {
      if (isset(
$form[$element]['#type']) && $form[$element]['#type'] == 'value') {
        continue; 
// пропускаем невидимые элементы формы
      
}
      
$form[$element]['#weight'] = $i// ставим вес
      
$i $i 5// шаг 5, чтобы была возможность вклинить элементы между
    
}
?>

"dancermanz" wrote:
Вопрос №2:

Обыкновенно функцию вызываем Smile

$ret = currency_api_convert($from, $to, $amt);

Возможно у вас она в не в файле .module, тогда нужно перед ней сделать инклуд соответствующего файла. Ну и естественно - смотрим наличие аргументов для данной функции, если их нет - берём