Добавляем поле "Цена" на страницу корзины в Ubercart

На странице /cart в Уберкарте показываются только такие поля:

Общая сумма, и кол-во элементов.

В одном проекте мне потребовалось добавить в таблицу корзины индивидуальную цену одного элемента, вот так:

после некоторого ковыряния, решилось десятком строк.

1. Создаем свой модуль.

2. Реализовываем в нем хук вашмодуль_tapir_table_alter. Это позволяет расширять многие таблицы, созданные через вспомогательный конструктор таблиц - tapir. Как вы могли догадаться, корзина в Уберкарте сделана именно через tapir.

3. Делаем хук похожим на мой:

<?php
function mymodule_tapir_table_alter(&$table, $table_id) {
  if ($table_id != 'uc_cart_view_table') return;
 
  // "Регистрируем" новую колонку
  $table['#columns']['price_item'] = array(
    'cell' => t('Price'),
    'weight' => 2.5,
  );
 
  foreach (element_children($table) as $key) {
    if (empty($table[$key]['nid']['#value'])) continue;
     
      // Вообще, тут можно легко избежать "дорогого" в плане нагрузки вызова node_load, и обойтись sql селектом. Но, если у вас у пользователя обычно бывает 1-5 товаров в корзине, этим можно пренебречь.
      $n = node_load($table[$key]['nid']['#value']);
      $p = uc_price($n -> sell_price, array());

     

// И добавляем в новую колонку данные.
      $table[$key]['price_item'] = array('#value' => $p, '#cell_attributes' => array('class' => 'price-item'));

   }
}

?>

end of story :)

Blog categories: Drupal