Вопросы темизации.

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

Аватар пользователя digital_sword digital_sword 5 октября 2009 в 12:08

Добрый день. Накопилось несколько вопросов, связанных с добавлением своих полей в вывод типа материала. Это при том, что в материале уже есть существующие cck поля.

  1. Допустим, тип материала reklam_group. Есть ли возможность добавлять в него новые поля (именно в вывод) не созданием файла node-reklam_group.tpl.php а из модуля? И как предпочтительнее?
  2. CCK поле выводится по принципу $node->ИмяCCKполя[0]['view'], а как вывести, например, дату создания, юзера-создателя материала?
  3. Как вывести, например, ссылку на юзера-создателя в определенном месте ноды, например, после уже существующего cck поля field_housenumber?

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 5 октября 2009 в 12:42

"digital_sword" wrote:
Допустим, тип материала reklam_group. Есть ли возможность добавлять в него новые поля (именно в вывод) не созданием файла node-reklam_group.tpl.php а из модуля? И как предпочтительнее?

Если поля уже используются у других материалов и созданы через cck - то при добавлении в данным материал можете использовать их
"digital_sword" wrote:
CCK поле выводится по принципу $node->ИмяCCKполя[0]['view'], а как вывести, например, дату создания, юзера-создателя материала?

Варианты могут быть разные, у node есть $node->created и $node->changed но выводить лучше например через format_date($node->created) , создатель theme('username', $node)
"digital_sword" wrote:
Как вывести, например, ссылку на юзера-создателя в определенном месте ноды, например, после уже существующего cck поля field_housenumber?

Можно использовать модуль contemplate

Аватар пользователя digital_sword digital_sword 5 октября 2009 в 21:51

А где можно про это подробнее почитать, какие поля откуда берутся?
contemplate не ужился с views_attach.

Что это за оператор в API?

Аватар пользователя sas@drupal.org sas@drupal.org 5 октября 2009 в 21:35

"digital_sword" wrote:
То есть полное: $node->format_date($node->created)??

...
print format_date($node->created);
...

Почитать - modules\node\node.module
...
function theme_node_submitted($node) {
return t('Submitted by !username on datetime',
array(
'!username' => theme('username', $node),
'datetime' => format_date($node->created),
));
}
...

Аватар пользователя digital_sword digital_sword 5 октября 2009 в 22:35

Нашел эти строки. Только если мне дата последнего изменения понадобится? Или дата регистрации этого самого пользователя? Или количество посещений (при включенном модуле статистики). В документации API есть табличка? Или по базе данных как-то, из таблицы такой-то...

Кстати как без contemplate расположить вставляемое поле? (не ужился с views_attach)

Аватар пользователя sas@drupal.org sas@drupal.org 6 октября 2009 в 13:05

"digital_sword" wrote:
Только если мне дата последнего изменения понадобится?

$node->changed
"digital_sword" wrote:
Или дата регистрации этого самого пользователя

$author = user_load(array('uid'=>$node->uid));
print format_date($author->created);
"digital_sword" wrote:
Кстати как без contemplate расположить вставляемое поле?

node.tpl.php

Аватар пользователя digital_sword digital_sword 6 октября 2009 в 14:14

sas@drupal.org, большое спасибо. А откуда вы информацию берете? Просто мало ли еще какие поля понадобятся? Или все из modules\node\node.module?

"<a href="mailto:sas@drupal.org">sas@drupal.org</a>" wrote:
"digital_sword" написал(а):

Кстати как без contemplate расположить вставляемое поле?"

node.tpl.php


А если у меня уже есть cck поля, которые добавлены через cck форму? Их заново прописывать в node-xxx.tpl.php, или все таки есть возможность вставить собственное поле "Дата регистрации юзера" поверх какого-нибудь существующего поля весами?

Аватар пользователя sas@drupal.org sas@drupal.org 6 октября 2009 в 15:53

"digital_sword" wrote:
А если у меня уже есть cck поля, которые добавлены через cck форму? Их заново прописывать в node-xxx.tpl.php, или все таки есть возможность вставить собственное поле "Дата регистрации юзера" поверх какого-нибудь существующего поля весами

Доступные поля
node.tpl.php
$node->content - в этом массиве они все видны, Вам остается сделать цикл по полям и сформировать свой $content для вывода, например так

<?php
$old_content = $content;
$content = '';
$elements_weight = array(
'page' => array(
array(
                        '#key'=>'#html',
                        '#value'=>'<div class="f-l w100p">'
                        ),
                        array(
                        '#key'=>'content',
                        '#name'=> 'price',
                        '#view_name' => '#value',
                        ),
                        array(
                        '#key'=>'content',
                        '#name'=> 'field_availability',
                        '#view_name'=> '#children',
                        ),
                        array(
                        '#key'=>'links',
                        '#name'=> 'add-to-cart',
                        ),
                        array(
                        '#key'=>'links',
                        '#name'=> 'view-cart',
                        ),
                        array(
                        '#key'=>'#html',
                        '#value'=>'</div>'
                        ),
                        array(
                        '#key'=>'#html',
                        '#value'=>'<div class="f-l w100p">'
                        ),
                        array(
                        '#key'=>'content',
                        '#name'=> 'body',
                        ),
                        array(
                        '#key'=>'#html',
                        '#value'=>'</div>'
                        ),
                        ),
'teaser' => array(
                        array(
                        '#key'=>'content',
                        '#name'=> 'field_multi_upload',
                        '#view_name' => '#children',
                        ),
                        array(
                        '#key'=>'#html',
                        '#value'=>'<div class="f-l">'
                        ),
                        array(
                        '#key'=>'content',
                        '#name'=> 'price',
                        '#view_name' => '#value',
                        ),
                        array(
                        '#key'=>'content',
                        '#name'=> 'field_availability',
                        '#view_name'=> '#children',
                        ),
                        array(
                        '#key'=>'links',
                        '#name'=> 'add-to-cart',
                        ),
                        array(
                        '#key'=>'links',
                        '#name'=> 'view-cart',
                        ),
                               
                        array(
                        '#key'=>'#html',
                        '#value'=>'</div>'
                        ),
                               
                        )

                        );

                        $view_type = $teaser ? 'teaser' : 'page';

                        if(isset($elements_weight[$view_type])){
                                foreach($elements_weight[$view_type] as $field_name){
                                        $node_field = array();
                                       
                                        if(strpos($field_name['#key'],'#') === FALSE){
                                                if(isset($node->$field_name['#key'])) $node_group = &$node->$field_name['#key'];
                                                if(isset($node_group[$field_name['#name']])) {
                                                        $node_field = &$node_group[$field_name['#name']];
                                                } else {
                                                        $node_field = array();
                                                }
                                        }
                                        elseif($field_name['#key'] == '#html'){
                                                $node_content[]['#value'] = $field_name['#value'];
                                        }
                                        if(!empty($node_field)) {
                                                 
                                                if($field_name['#key'] == 'links'){
                                                        if(!isset($node_field['href']) && isset($node_field['title'])){
                                                                $node_content[$field_name['#name']]['#children'] = '<div class="'.$field_name['#name'].'">'.$node_field['title'].'</div>';
                                                        } else {
                                                                $node_content[$field_name['#name']]['#children'] = '<div class="'.$field_name['#name'].'">'.l($node_field['title'],$node_field['href'],array('query'=>$node_field['query'],'attributes'=>$node_field['attributes'])).'</div>';
                                                        }
                                                }
                                                else {
                                                        $node_content[$field_name['#name']] = $node_field;
                                                }
                                                if(isset($field_name['#view_name'])){
                                                        $node_content[$field_name['#name']]['#view_name'] = $field_name['#view_name'];
                                                }
                                                unset($node_group[$field_name['#name']]);
                                                 
                                        }
                                }
                                $node_content = array_merge($node_content,$node->content);
                        }

                        foreach($node_content as $key => $value){
                                if(strpos($key,'#') === FALSE){
                                                        if(isset($node_content[$key]['#view_name']))
                                                        $content .= $node_content[$key][$node_content[$key]['#view_name']];
                                                        elseif(!empty($node_content[$key]['#children'])) $content .= $node_content[$key]['#children'];
                                                        elseif(!empty($node_content[$key]['#value'])) $content .= $node_content[$key]['#value'];
                                }
                        }

                        if($teaser) $node->teaser = $content ? $content : $old_content;
                        else
                        $node->body = $content ? $content : $old_content;

?>