Как темизировать Ubercart?

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

Аватар пользователя Rooner Rooner 14 марта 2012 в 18:34

Первый вопрос:
Как полностью изменить стили на странице оформления заказа? Т.е. из такой страницы оформления заказа:

Получить такую:

Покопавшись в коде нашел функцию theme_uc_cart_checkout_form(она отвечает за вывод формы на странице оформления заказа), в которую можно внести изменения(прописать стили прямо в код), и возможно получиться сделать то что на 2ом скрине. Но это слишком жестокий способ как для разработчика, так и для модуля Ubercarta

Второй вопрос:
В коде я обнаружил что для формы, а точнее для ее элемента есть переменная '#theme', для чего она нужна? мб это и есть темизация формы? Как ей пользоваться?
Код:
$form['panes'][$pane['id']] = array(
'#type' => 'fieldset',
'#title' => $pane['title'],
'#description' => !empty($return['description']) ? $return['description'] : NULL,
'#collapsible' => $pane['collapsible'],
'#collapsed' => variable_get('uc_use_next_buttons', FALSE) ? $collapsed : FALSE,
'#attributes' => array('id' => $pane['id'] .'-pane'),
'#theme' => isset($return['theme']) ? $return['theme'] : NULL,
);

Комментарии

Аватар пользователя glu2006 glu2006 14 марта 2012 в 18:43

Могу только Вам сказать что подолбиться придется основательно, как с помощью JS так и с помощью перекрытия theme функций.
Для нормальной темизации еще придется здорово в API убера порыться.
Либо полностью переписывать форму оформления заказа т.е. старую прятать и на сабмите передавать введенные данные в спрятанную форму и ее сабмитить. В общем гемороя будет предостаточно.

Аватар пользователя Orion76 Orion76 14 марта 2012 в 18:52

Простейший способ - только CSS
темизация drupal и ubercart ,в частности - длинная история.
читайте на api.drupal.ru про функцию theme, темизацию, хук hook_form_alter и т.д.

Аватар пользователя Rooner Rooner 14 марта 2012 в 19:05

Спасибо за советы, хоть и не радостные.
У меня такой риторический вопрос, нафига вообще использовать Drupal+Ubercart если их темизация, в частности магазина - это адовый труд? Если писать с нуля свой магазин, это займет столько же времени(уже писал).

Аватар пользователя Rooner Rooner 14 марта 2012 в 21:32

Вобщем переделал функцию, отвечающую за вывод форм. Работает, но мне это совсем не нравится:

<?phpfunction theme_uc_cart_checkout_form($form) {
  drupal_add_css(drupal_get_path('module', 'uc_cart') .'/uc_cart.css');
  drupal_add_css(drupal_get_path('theme', 'zvirec_test_theme').'/s/cart.css');
  $form['panes']['webform_nid10']['#type'] = "";
  $form['panes']['webform_nid12']['#type'] = "";
  
  $output .= drupal_render($form['panes']["cart"]);
  
  $output .= '
  <div id="content">
    <ul class="tabs">
      <li><a href="#reg">Регистрация</a></li>
      <li><a href="#doc">Документы</a></li>
      <li><a href="#delivery">Доставка</a></li>
    </ul>
    <div class="tabs-content">
      <ul>
  ';
  $numb = 1;
  $tabid = "";
  foreach (element_children($form['panes']) as $pane_id) {
    if (function_exists(($func = _checkout_pane_data($pane_id, 'callback')))) {
      $form['panes'][$pane_id]["#collapsible"] = 0;

      if ($pane_id != "cart") { 
        if ($numb == 1) { $tabid = "reg"; $numb++; }
        elseif ($numb == 2) { $tabid = "doc"; $numb++; }
        elseif ($numb == 3) { $tabid = "delivery"; $numb++; }
        $output .= '<li id="'.$tabid.'">'.drupal_render($form['panes'][$pane_id]).'</li>'; 
      }
    }
  }
  $output .= '</ul></div></div>';
  
  $output .= '<div id="checkout-form-bottom">'. drupal_render($form) .'</div>';
  
  return $output;
}?>

Аватар пользователя Xermit Xermit 14 марта 2012 в 21:52

Вообще то это один из стандартных способов темизации в drupal всего и вся, и вообще не огорчаться, а радоваться надо, что они в друпале есть и их несколько, так как в других системах и один то поищешь.

Аватар пользователя enemis enemis 15 марта 2012 в 4:04

"glu2006" wrote:
Либо полностью переписывать форму оформления заказа т.е. старую прятать и на сабмите передавать введенные данные в спрятанную форму и ее сабмитить. В общем гемороя будет предостаточно.

Абсолютно правильное замечание по поводу геморроя. Поделюсь опытом, я вот заморочился переписал все pane ubera,использовал все хуки. Потратил неделю. А начиналось примерно так же необходимо было реализовать расчет стоимости товара по метрам. У разных товаров разные характеристики у одних длина у других высота кароче все сложно. В результате переписал корзину, перестал работать, checkout(не правильно считать) и т.д. далее сегодня закончил тем что invoice несмог хукнуть, пришлось хакнуть модуль ubera.order.
Вот сие творение Так что если начнешь переписывать перепишешь все.

Аватар пользователя ihappy ihappy 15 марта 2012 в 4:39

"bsyomov" wrote:
Это не адовый труд,

Если сравнивать с другими, то уберкарт очень сложно темизировать.
Особенно касается корзину. Это тихий ужас.
Буквально неделю назад, надо было корзину переделать. Причем по мелочи. Вылилось это в такой геморой, что пришлось заюзать js.
В итоге, нелюбовь к уберу только повысилась.