一些模板制作使用到的代码和注意事项

论坛: 

新建主题经常使用的API(功能)摘要 

Drupal的主题或,例如,当您想要创建一个模块,一个经常使用的功能,我们总结备忘录的基础。

Drupal的版本,但你必须检查的D7,D6和,并享受看到对D8的链接,你也可以参考相应的代码。 

在Drupal的主题创建的,是你经常使用的功能。这么多,至少是要记住它可能是不错的。

特别重要的,在的template.php中描述,而“template_preprocess_page”,和主题文件命名约定,它是将被读取的顺序。


请求URI

CMS登录用户信息

功能帮助主题化

- 头版检查

- 获取某个特定领域

- 我做一个字符串翻译

- 元素渲染

- 自定义窗体调用

- 消息输出

- 阵列结构信息输出

- 主题目录信息采集

- 关于主题文件命名约定

- 页面饲料定制

- Views转换,这是输出从Unixtime意见的日期

- 「public://」转换为「/stes/default/files」



请求URI,如 

$GLOBALS['base_url'] => http://example.com/drupal
base_path() => /drupal/
request_uri() => /drupal/documentation?page=1
request_path() => documentation
current_path() => node/26419
arg(0) . arg(1) => node/1


无论您是登录。

user_is_logged_in()


用户信息获取 

global $user;
print $user->name;

为了得到当前路径
$ _GET ['Q']或者我可以得到的current_path()

要确定当前主题的路径
我用path_to_theme()。
为了寻求一个特定的主题或模块的路径,你可以使用drupal_get_path()。

为了获得在Drupal的URL查询参数,你可以使用drupal_get_query_parameters()。
你可以在和PHP是否正常$ _GET,但对我们塑造它很容易使用Drupal。

首页检查
drupal_is_front_page()

通过使用下面的代码代替,所以能够输出一个特定的字段。以下代码是输出body

print render(field_view_field('node', $node, 'body'));

上面的代码是很好的呈现,但你可以得到下面的代码,如果你想获得只有特定的领域。

field_get_items('node', $node, 'field_name');

我做翻译的字符串
Drupal是基本的,t($string, array $args = array(), array $options = array())中,指定一个字符串输出。

print '<p>'.t($content).'</p>';

元素的渲染(屏幕输出)

print render($content);

调用自定义窗体
Drupal的可以用来轻松地创建自定义表单。一旦创建形式,则可以通过从主题的API调用。
drupal_get_form()

print render(drupal_get_form('my_add_form'));


消息输出
例如,在输出消息中,如当页面更新时
drupal_set_message()
例如:

drupal_set_message(t('我已经注册的文章 '));

结构信息输出阵列的
$content和$node,当如何创建配置正在或主题,它是必要的。
如那些谁不熟悉的Drupal,使用的print_r(PHP函数),可能也有那些谁确认配置。
如果是的Drupal的情况下,通过下面的代码安装devel模块,您就可以确认。
dsm($content);


目录信息获取的主题
drupal_get_path('theme', 'THEME_NAME');

为Drupal的主题文件名是由一定的规则来确定。
例如,在“节点/ 1 /编辑”,和文件名的情况下,按如下方法测定。在这些中,它是一个模板文件6是当务之急。
1. page.tpl.php
2. page--node.tpl.php
3. page--node--%.tpl.php
4. page--node--1.tpl.php
5. page--node--edit.tpl.php
6. page--front.tpl.php (もしnode/1/edit がフロントページだった場合)

除了这些命名约定,如果你想添加一个主题文件名,可以在下面的代码更改。

function bootstrap_subtheme_preprocess_page(&$variables, $hook) {
   //Add multiple suggestions for pages based on Node
   if(isset($vars['node']->type)) { //有些条件
    $variables['theme_hook_suggestions'][] =  'page__mytemplate';
   }
}

主题文件是如下。
page--mytemplate.tpl.php


「public://」转换的文件路径为「/sites/default/files」

$file_path = file_create_url('public://img.png');


template_preprocess_page
为了更强烈地定制的Drupal主题,template_preprocess_page功能是可用的。
page.tpl.php中的处理之前,要使用template_preprocess_page,你可以传递一个变量page.tpl.php中,你可以通过改变环境的模板文件,这样就可以。
我给上面,甚至改变模板文件,我们有一个过程使用preprocess_page。其他的处理之前node.tpl.php也template_preprocess_node并且,象template_preprocess(),具有各种功能都可用。
preprocess_page确实在的template.php的描述。

简单的示例
template.php

<?php
// $Id: $ 
function THEMENAME_preprocess_page(&$vars) { 

  //如果你想看到什么样的价值是
  dsm($vars); 

  //获取节点的主体,它被传递给page.tpl.php中 
  $vars['body_content'] = field_view_field('node', $vars['node'], 'body') 

  // 我通过在page.tpl.php中的内容 
  $vars['my_content'] = '<p>ほげほげテスト</p>';
}


page.tpl.php

<?php print render($my_content); ?>


路过的每一本书锁定数据

// template.php
// 我通过该块数据被设置到页脚块html.tpl.php

function THEMENAME_preprocess_html(&$variables) {
    $variables['footer'] = block_get_blocks_by_region('footer');
}
 
//html.tpl.php
print render('footer');


Select

例如:

$result = db_select('node', 'n')
->fields('n')
->condition('id', $useruid, '=')
->execute()
->fetchAssoc(); 
print $result;

例如)多个记录 

$query = db_select('node', 'nid');
$query->fields('nid');
$result = $query->execute();
 
while($record = $result->fetchAssoc()) {
    $r_node[] = $record;
}

Update

db_update('node')
->fields(array(
    'uid' => 5,
))
->condition('uid', 1, '=')
->execute();


dashan 答复于