Drupal / Ubercart ... стиль узла? - PullRequest
3 голосов
/ 29 мая 2009

Я пытаюсь оформить вид продукта на сайте Drupal, но у меня проблемы. Я не могу найти, где представление узла (продукта) собрано в ubercart!

Я использую UC 5.x-1.7, и мне нужно стилизовать страницу представления узла (продукта). На данный момент в моем файле node.tpl.php у меня есть

print $body;
, который выкладывает все SKU, атрибуты, цену, изображение и т. Д.

Проблема в том, что мне нужно сделать это в другом стиле - мне нужно работать над дизайном, сделанным дизайнером. Я начал заново делать свою собственную версию, используя переменные типа

$node->content['body']['#value']
и т. Д.

Я столкнулся с проблемой, пытаясь работать с различными атрибутами продукта. Я не могу узнать, как поместить их на мою страницу, или любую документацию о том, как работать с ними с точки зрения кодировщика.

Есть ли более простой способ? Где бы я искал стиль существующего дисплея (т.е. переменную $ body)?

Редактировать: моя тема основана на теме дзен

Ответы [ 4 ]

4 голосов
/ 29 мая 2009

Если проблема в стиле, вы можете написать собственный CSS для этого.

Вы можете использовать модуль theamer , чтобы сообщить вам, какие файлы шаблонов использовать, я думаю, что есть такие, которые поставляются с ubercart, которые вы можете переопределить. Посмотрите в разделе кандидата шаблон информации

Наконец, вы можете использовать hook_nodeapi op = view для управления тем, что фактически попадает на страницу для отображения в переменной $ body.

2 голосов
/ 29 мая 2009

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

./sites/all/modules/ubercart/uc_product/views

Это будет начало. Вот где скорее всего построен узел.

1 голос
/ 26 января 2012

Вот пример использования hook_nodeapi, как упомянуто Джереми Френчем:

/**
 * Implements hook_nodeapi().
 */
function YOUR_MODULE_nodeapi(&$node, $op, $arg3 = NULL, $arg4 = NULL) {
  switch ($op) {
    case 'view':
    // Don't show list price unless set.
    if (isset($node->content['list_price']) && $node->list_price == 0) {
      unset($node->content['list_price']);
    }
    break;
  }
}

Просмотрите uc_product_view () в modules / ubercart / uc_product / uc_product.module, чтобы увидеть различные поля контента.

1 голос
/ 27 июня 2009

Если вы используете модуль Devel, вы можете увидеть точную структуру массивов и объектов и получить именно то, что вам нужно, от объекта $ node. затем создайте файл node-product.tpl.php и замените переменную $ content этими частями. Большинство значений этих переменных имеют разметку без изменений.

Если вы хотите изменить разметку, скажем, для атрибутов, вам нужно изменить функцию предварительной обработки, которая обрабатывает атрибут div. Если вы просто удалите div id = "attribute" (класс может быть? Я забыл) из начала и конца, все они будут печататься отдельно в своей собственной обертке class = "attribute". Просто добавьте это в ваш файл template.php.

Затем вы можете перемещать их по всей странице с помощью CSS, вместо того, чтобы все они помещались в один элемент div.

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

Многое можно сделать с помощью чистого CSS, но приятно иметь разметку, которая не ломается, когда CSS неправильно отображается в плохих браузерах.

Надеюсь, это полезно. Я не уверен, что все это будет работать в Drupal 5, так как я делал все это с 6 ... так что, надеюсь,

...