В Drupal Commerce имеется очень неприятная проблема, с которой приходится сталкиваться каждый раз при создании очередного магазина. Проблема тянется очень давно. Почитать начало можно тут, там же ссылки, по которым можно перейти и почитать ишью. Решение, которое предлагается, мне не нравится, потому что ставить дополнительные модули, несущие громоздкий функционал для перевода пары строк - помоему маразм, патчить модули - тоже не интересно, каждый раз при выходе новой версии модуля - тратить время на патч модуля мне как то не интересно.
Какие же есть решения?
Первое решение подробно описано здесь, но мне этот способ не очень нравится по нескольким причинам:
- Если тема админки отличается от дефолтной, то дополнительно придется или хакать тему админки или создавать сабтему;
- Если на сайте используется несколько тем, то код придется пихать в каждую тему, такая идея мне тоже не нравится, потому что по факту один и тот же код будет разбросан по разным файлам.
Второе решение более универсальное и уже не привязано к теме оформления. Для его реализации создадим маленький модуль, в котором подменим theme функцию:
/**
* Implements hook_theme_registry_alter().
*/
function example_theme_registry_alter(&$theme_registry) {
$theme_registry['commerce_price_formatted_components']['function'] = 'theme_example_price_formatted_components';
}
/**
* Themes a price components table.
*
* @param $variables
* Array contains the 'components' array and original 'price' array.
*
* @return string
* The formatted price components.
*/
function theme_example_price_formatted_components(&$variables) {
// Add the CSS styling to the table.
drupal_add_css(drupal_get_path('module', 'commerce_price') . '/theme/commerce_price.theme.css');
// Build table rows out of the components.
$rows = array();
$variables['components']['commerce_price_formatted_amount']['title'] = t('Order total');
foreach ($variables['components'] as $name => $component) {
$rows[] = array(
'data' => array(
array(
'data' => $component['title'],
'class' => array('component-title'),
),
array(
'data' => $component['formatted_price'],
'class' => array('component-total'),
),
),
'class' => array(drupal_html_class('component-type-' . $name)),
);
}
return theme('table', array('rows' => $rows, 'attributes' => array('class' => array('commerce-price-formatted-components'))));
}