CMS Drupal

Понадобилось, при подключении сайта на Drupal к платежной системе ASSIST передавать данные в кодировке cp1251. Передавал фамилию и имя.
Первым делом нужно было сделать передачу данных на внешний URL:
$form['#action'] = "https://test.assist.ru/shops/cardpayment.cfm";
Логично было предположить, что написав:
$form['#accept-charset'] = "Windows-1251";
я получу форму с виндовой кодировкой. Но не тут то было. Оказывается в Drupal-е UTF8 в формах зашито напрочь:

function theme_form($element) {
  // Anonymous div to satisfy XHTML compliance.
  $action = $element['#action'] ? 'action="'. check_url($element['#action']) .'" ' : '';
  return '<form '. $action .' accept-charset="UTF-8" method="'. $element['#method'] .'" id="'. $element['#id'] .'"'. drupal_attributes($element['#attributes']) .">\n<div>". $element['#children'] ."\n</div></form>\n";
}

Можно было бы прямо здесь, в ядре подправить и добавить по аналогии доп. параметр для возможности изменения кодировки. Но т.к. это функцию можно переопределить в своей теме, то лучше будет не трогать ядро, а написать в файле template.php:

function phptemplate_form($element){
  if($element['#id']== 'alexshop-gate-checkout-form' ){
    $charset='cp1251';
  }else{
    $charset='UTF-8';
  }
  $action = $element['#action'] ? 'action="' . check_url($element['#action']) . '" ' : '';
  return '<form '. $action .' accept-charset="'.$charset.'" method="'. $element['#method'] .'" '. 'id="'. $element['#id'] .'"'. drupal_attributes($element['#attributes']) .">\n<div>". $element['#children'] ."\n</div></form>\n";
}

И все бы вроде хорошо, работает. Но проверял я это в FF. Потом выложил на хостинг и стал проверять в IE. А IE видимо плевать хотел на accept-charset. Точнее почему то такого параметра я вообще не увидел в форме.
Был вариант делать скрытые поля и в них писать value в виндовой кодировке с помощью функции iconv, но Друпал видимо фильтрует такого рода подстановки и в форме мы имеем value="". Так что я не смог побороть IE с кодировкой. Это так то не влияет на саму процедуру перевода денег, просто в конце, при выводе на экран бланка, видны иероглифы.

Пока оставил. Точнее предложил покупателям вбивать дополнительно имя и фамилию на английском языке.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".