Добавляем поле "Цена" на страницу корзины в 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:
24/11/2010 - 00:03

Comments
Спасибо, не знал о tapir.
А зачем новый модуль? Не проще ли это было закинуть сразу в template.php ?
я не уверен, что этот хук сработает из темы. И даже если сработает - этот функционал может понадобиться на других активных темах сайта. Попробуйте, может и из template.php заведется, но по-моему не должен.
Да действительно данный код из template.php не работает.
Пробовал на каталоге фирм BizLine.com.ua
Я бы еще кое-чего добавил конечно же, но по сути сказано практически все.
тест
Уважаемый автор, а не подскажите как добавить вместо цены термины таксономии этих товаров, которые в корзине?
Post new comment