欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal 模板文件 主题建议 顺序

shiping1 的头像

主题包含哪些文件
    1)主题名.info文件
    2)page.tpl.php(可能还有各种分支)
    3)node.tpl.php(可能还有各种分支)
    4)block.tpl.php(也许可能没有)
    4)box.tpl.php 评论的容器设置,其实一般不用改,一般用不到(也许可能没有)
    5)comment.tpl.php(也许可能没有)
    6)template.php文件(也许可能没有)
    7)phptemplate.engine一般用不到(也许可能没有)里面的函数可以重写的

themes->engines-> 模板引擎目录
去drupal网站上找smarty,因为drupal已为它封装
 不要在smarty网站上找smarty
sites/all/themes 的目录下
1)http://drupal.org/project/smarty
  放到 engine的目录中就可以了
2)主题的目录在 sites/all/themes 下面
themes 的 主题目录中应包含的文件
block.tpl.php 区块的tpl文件
box.tpl.php 评论容器的显示 一般不需要更改 ,但是是可以更改的
default.tpl.php 暂时无用
phptemplate.engine 函数库 里面包含模板函数 不必要拷到主题目录中 是可以重写的
3)模板机制的原理
  设置好各种变量
  传递给模板变量 page.tpl.php,node.tpl.php等
  显示
  phptemplate根据不同的内容,重新组织页面,页面的不同部分
    是由不同的主题文件来控制的
4)phpTemplate页面的组成
  page.tpl.php模板来控制整个页面的显示
  有一部分是区块来显示的,读的是 block.tpl.php
  另有一部分是node.tpl.php来控制
  以摘要形式显示的时候也是读node.tpl.php,它也是读title及body的部分(摘要) 其它就不读取了
  如果不读view 也可以手动的修改 node.tpl.php文件来进行摘要简单的列表的处理

 创建主题步骤
 一)创建主题文件夹
 二)准备设计 somepage.html
         somestyle.css
             images
 三)决定是否在现有的主题上开发,drupal的主题它一般不规范
    有一种叫zen的主题非常适合在它上面开发
    将theme/engines/phptemplate/下的
    除default.tpl.php和 phptemplate.engine外的所有文件,
    copy到mytheme
 四)Garland 默认的 较友好的 可通过UI调节颜色配置
    Chameleon(不建议,因为未使用phpTemplate主题引擎
      不是某种意义上的MVC,不能更好的表示层与逻辑层分离)
   Zen是drupal的一个主题框架
      自带两个主题 普通版 像Garland主题使用
      经典版(Zen Classic) 比较优秀 效率高
      自带一个创建工具包 StarterKit 其实是一堆模板文件
     简洁 良好的布局 可以随意修改主题 兼容各个浏览器 符合标准(对宽窄屏也友好)
 五)page.tpl.php 根据url来决定调用哪个模板文件
    http://localhost/?q=node/2/edit
    找(1)page-node-edit.tpl.php
      (2)page-node-2.tpl.php  
      (3)page-node-tpl.php(不是它)  page-node.tpl.php(是它)
      (4)page.tpl.php
      如果还找不到 就回到引擎中,根据默认的形式输出来
      http://localhost/   page-front.tpl.php(首页)
  六)page.tpl.php 代码片断
    预定义的变量
  七)node.tpl.php
    每个内容都是node
    只要和内容的显示有关 一定调用node.tpl.php
    在列表中显示,(view除外)使用node.tpl.php
        views中(full, teaser)是会调用node.tpl.php
     views中(table view, list view)不会调用node.tpl.php
    node会根据节点类型,可以调用不同的node.tpl.php
      比如  node-blog.tpl.php node-story.tpl.php
    //这里也是一种优先级






主题包含哪些文件
    1)主题名.info文件
    2)page.tpl.php(可能还有各种分支)
    3)node.tpl.php(可能还有各种分支)
    4)block.tpl.php(也许可能没有)
    4)box.tpl.php 评论的容器设置,其实一般不用改,一般用不到(也许可能没有)
    5)comment.tpl.php(也许可能没有)
    6)template.php文件(也许可能没有)
    7)phptemplate.engine一般用不到(也许可能没有)里面的函数可以重写的

themes->engines-> 模板引擎目录
去drupal网站上找smarty,因为drupal已为它封装
 不要在smarty网站上找smarty
sites/all/themes 的目录下
1)http://drupal.org/project/smarty
  放到 engine的目录中就可以了
2)主题的目录在 sites/all/themes 下面
themes 的 主题目录中应包含的文件
block.tpl.php 区块的tpl文件
box.tpl.php 评论容器的显示 一般不需要更改 ,但是是可以更改的
default.tpl.php 暂时无用
phptemplate.engine 函数库 里面包含模板函数 不必要拷到主题目录中 是可以重写的
3)模板机制的原理
  设置好各种变量
  传递给模板变量 page.tpl.php,node.tpl.php等
  显示
  phptemplate根据不同的内容,重新组织页面,页面的不同部分
    是由不同的主题文件来控制的
4)phpTemplate页面的组成
  page.tpl.php模板来控制整个页面的显示
  有一部分是区块来显示的,读的是 block.tpl.php
  另有一部分是node.tpl.php来控制
  以摘要形式显示的时候也是读node.tpl.php,它也是读title及body的部分(摘要) 其它就不读取了
  如果不读view 也可以手动的修改 node.tpl.php文件来进行摘要简单的列表的处理

 创建主题步骤
 一)创建主题文件夹
 二)准备设计 somepage.html
         somestyle.css
             images
 三)决定是否在现有的主题上开发,drupal的主题它一般不规范
    有一种叫zen的主题非常适合在它上面开发
    将theme/engines/phptemplate/下的
    除default.tpl.php和 phptemplate.engine外的所有文件,
    copy到mytheme
 四)Garland 默认的 较友好的 可通过UI调节颜色配置
    Chameleon(不建议,因为未使用phpTemplate主题引擎
      不是某种意义上的MVC,不能更好的表示层与逻辑层分离)
   Zen是drupal的一个主题框架
      自带两个主题 普通版 像Garland主题使用
      经典版(Zen Classic) 比较优秀 效率高
      自带一个创建工具包 StarterKit 其实是一堆模板文件
     简洁 良好的布局 可以随意修改主题 兼容各个浏览器 符合标准(对宽窄屏也友好)
 五)page.tpl.php 根据url来决定调用哪个模板文件
    http://localhost/?q=node/2/edit
    找(1)page-node-edit.tpl.php
      (2)page-node-2.tpl.php  
      (3)page-node-tpl.php(不是它)  page-node.tpl.php(是它)
      (4)page.tpl.php
      如果还找不到 就回到引擎中,根据默认的形式输出来
      http://localhost/   page-front.tpl.php(首页)
  六)page.tpl.php 代码片断
    预定义的变量
  七)node.tpl.php
    每个内容都是node
    只要和内容的显示有关 一定调用node.tpl.php
    在列表中显示,(view除外)使用node.tpl.php
        views中(full, teaser)是会调用node.tpl.php
     views中(table view, list view)不会调用node.tpl.php
    node会根据节点类型,可以调用不同的node.tpl.php
      比如  node-blog.tpl.php node-story.tpl.php
    //这里也是一种优先级
    
    
    

 









主题包含的文件
  1)主题名.info文件
  2)page.tpl.php (可以没有)
  3)node.tpl.php (可以没有)
  4)block.tpl.php (可以没有)
  5)logo.png 主题的网站标志  (可以没有)
  6)screenshot.png 主题显示效果截图  (可以没有)

1)info文件
    name = management    name 必须,主题名称,与当前主题文件夹名称相同
    description = management template 推荐,主题描述
    version = 1.x        推荐,当前主题的版本号
    core = 6.x        必须,drupal 的版本号,还对cvs有帮助
    engine = phptemplate    多数情况下必须,如果有父主题,可以不用指明
    stylesheets[all][] = style.css    样式表
    scripts[] = script.js    script脚本
    screenshot = screenshot.png
    regions[left] = Left sidebar  右边是用户可读的区域名字
    regions[right] = Right sidebar
    regions[content] = Content
    regions[header] = Header
    regions[footer] = Footer
    base theme 基主题 子主题可以声明一个基主题 这允许主题的继承
    features  //不太懂 许多由主题控制输出的页面元素,可以在主题的配置页面启用或者禁用
    php = 4.3.3     这个定义了主题支持的PHP最低版本。而对于大多数的主题,都不应该添加这一项。
只有建好info文件 才能在后台看到主题
2)没有效果截图,在主题文件夹下加上screenshot.png
    如果info中没有配置,默认是screenshot.png
3)建空的 page.tpl.php 清空缓存

    注:如果输出了空白页面,下次无法清空缓存,可以访问如下地址:
    admin/settings/performance这时候只要在页面的page.tpl.php标签内部输入
    print $content;这时就会输出页面内容,
    (admin/settings/performance网址始终是不用缓存的)
    就可以看到“clear cached
    data”按钮了,清空之后再把我们加上的print $content;去掉后继续我们
    的内容)。
    如果是在linux下
    开发,可能会遇到文件权限问题,导致源代码也看不到输出,我的习惯首先将
    使用的文件夹设置成当前用户作为文件夹所有者,这样一般不会导致上述问题
    出现
4)变量含义
 $head 页头的html,比如页面编码声明,ico标识等内容。
 $head_title 网页标题
 $styles 样式表
 $scripts js文件
 $site_name 站点名字
 $header 是body里的header 与 $head 不要混淆了 regions[header]
 $left  regions[left]
 //我们不对regions定义 ,这样就使用默认的regions
 $right  regions[right]
 //我们可以定义以下:
 regions[lefttop] = leftTop
 此时必须还要定义 regions[left] regions[right]等 否则 $left $right失效
 $search_box //是什么东西?查一下

5)函数含义
    print theme('links',$primary_links, array('id'=>'site_menu'));
    
    //$primary_links 是主导航接组成的数组
            array(3) {
          ["menu-144"]=>
          array(3) {
            ["attributes"]=>
            array(1) {
              ["title"]=>
              string(0) ""
            }
            ["href"]=>
            string(27) "http://www.drupalstudy.shi/"
            ["title"]=>
            string(6) "首页"
          }
          ["menu-145"]=>
          array(3) {
            ["attributes"]=>
            array(1) {
              ["title"]=>
              string(0) ""
            }
            ["href"]=>
            string(32) "http://localhost/drupal/node/10 "
            ["title"]=>
            string(9) "毛太祖"
          }
          ["menu-146"]=>
          array(3) {
            ["attributes"]=>
            array(1) {
              ["title"]=>
              string(0) ""
            }
            ["href"]=>
            string(30) "http://localhost/drupal/node/8"
            ["title"]=>
            string(9) "邓太宗"
          }
        }




api自己用勤用,不想老是想着自己写函数,要想着用人家的函数
1)node.tpl.php
    <?php  var_dump($node); ?>
    field_字段名[0]['view'];这些一般是cck来定义创建的
2)devel 模块 有了它 能更好的开发 主题(其实最方便的是主题)和模块  
    一)devel 可以查看每个页面调的变量
    二)Devel node access 看节点的访问权限
    三)Devel generate 生成测试用的用户 节点等
3)页面加载流程
    一)生成一堆变量,读入模板文件,呈现html给用户
4)dev   最基本的功能就是查看页面输出的变量
        dev load 在变量处理前读入的变量
    dev render输出前生成的变量 (初学者先用它吧)
      一)content变量 模板引擎处理过的要生成的内容的变量
      $content(是由数组串成的串) 也可以是 $node->content(它不行了,是一个数组)
5)drupal 有太多的主题theme函数,直接拿过来用 可 输出"用户名" 图像 表格等
    一)theme根据访问者的权限进行显示
    二)theme函数对html元素进行统一的 有规律的增加class类css
    三)theme函数网址 http://api.drupal.org/api/group/themeable/5
    四)重要的函数 theme() ;根据传来的变量寻找对应的函数
    theme('image',$path)...首先找theme_image函数,如果找到的话 就会
    调用theme_image($path)
    尽量使用 theme('image',$path) 尽量不使用 theme_image($path)
    再举个例子 <?php $user=user_load(array('uid'=>$node->uid)); ?>
          <?php print theme('username',$user); ?>
    五)常用的theme函数 (这些函数要实践一下)
        theme_block      模块开发时用到
        theme_box        显示div里面是传来的内容,只是自动生成class 不能手动添加class
        theme_image     通常在使用cck 创建图像后,传路径过来得到img
        theme_item_list  输出ul li 传进来的是数组,数组里的每个元素放在li里
        theme_links     用于显示超链接 好像与l函数差不多(类似 但不一样)
        theme('links',$primary_links, array('id'=>'site_menu'));//$primary_links数组
        http://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_links/6
        //function theme_links($links, $attributes = array('class' => 'links'))
        l($links->title, 'node/'.$links->nid); //$links->title, 'node/'.$links->nid只是一个
        //比如首页 l('Return to index page','<front>')
        them_table     根据变量 输出带表头的表格
        theme_usename    输出带链接的用户名
    六)重写theme函数 theme函数调用机制(Hook机制)
       theme('username',$user)按下列顺序从所有文件中找
            theme-name_username()  //theme-name 是主题名
            比如主题名是mytheme 那么找 mytheme_username()
            theme-engine_username()//theme-engine 模板引擎名
            如果没有 找模板引擎 找 phptemplate_username()
            theme_username()
            如果没有 执行 theme_username() 输出结果
    七)重写在 自定义主题目录下的 template.php文件里
        例子//重写 _username     //$user不可以引用(&$user 至少在drupal 6 不可以)
            function phptemplate_username($user){
                return 'hello '.$user->name;
            }
   

    
  

普通分类: