drupal7 学习笔记-----(持续更新中...)

简介: 最近折腾了一下drupal7,大概的了解了一下,头昏那个脑涨啊。找网上的介绍倒是一大堆,但大多是e文的,中文的一半都是一知半解的叙述。 与痛苦和纠结中总结了一些经验,几记录下来备用。具体如下: 一  安装相关   1 安装drupal超时(主要是安装中文翻译的时候)   方法一:   修改php.

最近折腾了一下drupal7,大概的了解了一下,头昏那个脑涨啊。找网上的介绍倒是一大堆,但大多是e文的,中文的一半都是一知半解的叙述。 与痛苦和纠结中总结了一些经验,几记录下来备用。具体如下:

一  安装相关

  1 安装drupal超时(主要是安装中文翻译的时候)

  方法一:
  修改php.ini文件:memory_limit = 256M (依实际情况设定)
  方法二:
  打开\sites\default\settings.php文件,在最后增加以下两行:
  ini_set(‘memory_limit’, ’256M’); //加大php的内存 也可以在php.ini中设置
  ini_set(‘max_execution_time’, 2000); //加大页面执行时间 php.ini中的默认值是30 (秒)

二  主题相关

  1 主题出问题后强制恢复系统默认主题

UPDATE system SET status = 0 WHERE type = 'theme'; 
UPDATE system SET status=1 WHERE type='theme' AND (name = 'seven' OR name = 'bartik'); 
TRUNCATE cache; 
TRUNCATE cache_block; 
TRUNCATE cache_bootstrap; 
TRUNCATE cache_field; 
TRUNCATE cache_filter; 
TRUNCATE cache_form; 
TRUNCATE cache_image; 
TRUNCATE cache_menu; 
TRUNCATE cache_path; 
TRUNCATE cache_page; 
TRUNCATE cache_update; 
TRUNCATE cache_views; 
TRUNCATE cache_views_data;

  2 获取当前页的模版文件列表

  在你使用的当前主题文件夹下有个template.php,在其中的xxxxx_process_page方法代码块中(没有就建立)增加一下代码:

var_dump($variables['theme_hook_suggestions']);

  这样你随便打开某个页面就会在页首打印出该页获取的模版文件的顺序以及模版文件名称,一目了然,注意系统加载的优先级顺序是倒序的。而不用去翻n多文档,实验n次,纠结n次了。。。,明眼人可能看出来了,变量列表中的theme_hook_suggestions就是模版信息数组。你其实可以随便修改定制的。。。呃,慎重,最好按照后面一个小结的方法来增加。

  3 自定义模板文件名称

  有时候你想根据特定的格式来获取模版文件。举个例子,如果你想根据内容类型来制定模版,那么你可以同样在template.php中xxxxx_process_page方法中增加一下代码

 //增加模版选择器
if (!empty($variables['node'])) {
    $node = $variables['node'];
    $variables['theme_hook_suggestions'][] = 'page__type__' . $node->type;
}

  这样当drupal打开某内容的页面时,将优先使用你定义的模版文件,是不是貌似很吊?当然更改之后记得清空系统自己的缓存,要不然它依然会加载之前默认的模板,只需执行一下:

delete from cache

  

  另外值得一提的是HOOK的复写,上面的xxxxx_process_page其实就是 hook_process_HOOK的复写,而drupal加载这些HOOK的顺序如下:

     template_preprocess()
        template_preprocess_hello()
        helloModule_preprocess()
        helloModule_preprocess_hello()
        phptemplate_preprocess()
        phptemplate_preprocess_hello()
        helloTheme_preprocess()
        helloTheme_preprocess_hello()
        template_process()
  所以你可以自己斟酌在哪里复写,当然你也可以集中管理,例如我的项目中我是这么写的:
function diantang_process(&$variables,$hook){
  $node = $variables['node'];
  switch ($hook) {
    case 'comment':
      $variables['theme_hook_suggestions'][]='comment__'.$node->type;
      break;
    case 'page':
      if (!empty($variables['node'])){
        $variables['theme_hook_suggestions'][] = 'page__type__' . $node->type;
      }
    break;
    default:
      break;
  }
}

 

  4 动态改变当前页面所对应的菜单项

  依然是在xxxxx_process_page中增加以下代码:

if (!empty($variables['node'])) {
    $node = $variables['node'];
    //所有的 'selftype' 类型的node的menu设置成为其对应的tag的菜单项
    switch ($variables['node']->type) {
      case 'selftype':
        $tid=$variables['node']->field_tags_news['und'][0]['tid'];
        menu_set_active_item('taxonomy/term/'.$tid);
      break;
    }
  }

  这样,如果当前页面的内容类型是selftype的话,那么当前激活的菜单就将是该内容类型对应的标签。其中menu_set_active_item中设置的是 菜单项的系统地址。

三 一些常用的方法

  1 获取,node中自定义的字段
  $node= node_load(12);
  $items = field_get_items('node', $node, 'field_image');
  2 获取node中自定义字段的可以render显示的数组:
  $node= node_load(12);
  $items = field_get_items('node', $node, 'field_image');
  $output = field_view_value('node', $node, 'field_image', $items[0]);
  print render($output);
  3 获取node中某文件字段(图片,媒体)的地址
  $node= node_load(12);
  $items = field_get_items('node', $node, 'field_image');
  $url= file_create_url($items[0]["uri"])
  4 drupal 中现在已经内置了jquery和jqueryui模块,但是jquery至增加了core,比如我们要加一个tabs;
  drupal_add_library('system', 'ui.tabs');
  drupal_add_js('jQuery(document).ready(function(){jQuery( "#mytabs" ).tabs();});', 'inline');

 

  5 drupal中常用的模块api
  // node
  node_load($nid = NULL, $vid = NULL, $reset = FALSE);
  node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE);

 

  // user
  user_load($uid, $reset = FALSE);
  user_load_multiple($uids = array(), $conditions = array(), $reset = FALSE);

 

  // menu tree
  menu_tree_all_data($menu_name, $link = NULL, $max_depth = NULL);
  menu_tree_page_data($menu_name, $max_depth = NULL, $only_active_trail = FALSE);

 

  // term
  taxonomy_term_load($tid) : object
  taxonomy_term_load_multiple($tids = array(), $conditions = array()) : array
  taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE) : array

 

  // block
  block_load($module, $delta);

四  一些数据库操作

       // select
    db_select('node', 'n')
        ->extend('PagerDefault')->limit(5)
        ->fields('n');
    $statement->fetchField();
    
    db_query_range('SELECT n.nid, n.title, n.created
      FROM {node} n WHERE n.uid = :uid', 0, 10, array(':uid' => $uid));

    // insert
    $fields = array('nid' => 1, 'title' => 'my title', 'body' => 'my body');
    db_insert('node')->fields($fields)->execute();

    // update
    db_update('example')
      ->condition('id', $id)
      ->fields(array('field2' => 10))
      ->execute();

    // select
    $query = db_select('comment', 'c')
      ->fields('c', array('subject', 'name'))
      ->fields('n', array('title'))
      ->extend('PagerDefault')->limit(5)
      ->condition('n.type', array('article'), 'IN')
      ->orderBy('c.cid', 'DESC');
    $query->join('node', 'n', 'n.nid = c.nid');
    $statement = $query->execute();

    $query = db_select('node', 'n')->fields('n', array('title'))->distinct();
    $query->join('taxonomy_index', 't', 't.nid = n.nid');
    $or = db_or()->condition('n.uid', $authorId)->condition('t.tid', $cats, 'IN');
    $query->condition($or)->execute();

    // fetch
    foreach ($query->execute() as $object) {
      echo $object->name;
    }    

 

 

 

 

目录
相关文章
|
存储 资源调度 负载均衡
云计算——常见集群策略
云计算——常见集群策略
554 0
|
7月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回查询
本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。
235 4
|
8月前
|
机器学习/深度学习 存储 人工智能
SRMT:一种融合共享记忆与稀疏注意力的多智能体强化学习框架
自反射记忆Transformer (SRMT) 是一种面向多智能体系统的记忆增强型Transformer模型,通过共享循环记忆结构和自注意力机制,优化多智能体间的协同效率与决策能力。SRMT在复杂动态环境中展现出显著优势,特别是在路径规划等任务中。实验结果表明,SRMT在记忆维持、协同成功率及策略收敛速度等方面全面超越传统模型,具备广泛的应用前景。
329 11
SRMT:一种融合共享记忆与稀疏注意力的多智能体强化学习框架
|
12月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
245 5
|
XML JSON API
淘宝京东商品详情数据解析,API接口系列
淘宝商品详情数据包括多个方面,如商品标题、价格、图片、描述、属性、SKU(库存量单位)库存、视频等。这些数据对于买家了解商品详情以及卖家管理商品都至关重要。
|
SQL 安全 API
互联网并发与安全系列教程(09) -基于AccessToken方式实现API设计
互联网并发与安全系列教程(09) -基于AccessToken方式实现API设计
200 0
|
开发工具 git
vscode 将已修改代码提交推送git时一直转圈也没有反馈
vscode 将已修改代码提交推送git时一直转圈也没有反馈
1785 0
|
机器学习/深度学习 运维 监控
函数计算产品使用问题之如何解决SD插件安装后不显示的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
208 0
|
缓存 边缘计算 网络协议
阿里云CDN介绍
阿里云CDN介绍
382 0