drupal7學習筆記—–(持續更新中…)
最近折騰了一下drupal7,大概的瞭解了一下,頭昏那個腦漲啊。找網上的介紹倒是一大堆,但大多是e文的,中文的一半都是一知半解的敘述。 與痛苦和糾結中總結了一些經驗,幾記錄下來備用。具體如下:
一 安裝相關
1 安裝drupal超時(主要是安裝中文翻譯的時候)
方法一:
修改php.ini檔案:memory_limit = 256M (依實際情況設定)
方法二:
開啟sitesdefaultsettings.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; }
相關文章
- 【持續更新...】ligerGrid 學習筆記筆記
- 【持續更新...】ECharts學習筆記Echarts筆記
- 【持續更新...】Nginx 學習筆記Nginx筆記
- Java 學習筆記(持續更新)Java筆記
- 【持續更新...】Microsoft SSIS 學習筆記ROS筆記
- Node.js 學習筆記_20170924(持續更新…)Node.js筆記
- 彙編筆記(持續更新中)筆記
- [Android學習筆記]雜碎知識(持續更新)Android筆記
- 日常工作筆記(持續更新中。。)筆記
- 愛玩手機的貓Linux學習筆記(持續更新)Linux筆記
- 一個前端工程師的Docker學習筆記【持續更新】前端工程師Docker筆記
- 遊戲開發流程與思想學習筆記(持續更新)遊戲開發筆記
- 軟考筆記 --- 持續更新筆記
- AnimalController 學習 持續更新Controller
- iOS開發備忘筆記 (持續更新中)iOS筆記
- Web命令執行筆記(持續更新)Web筆記
- 《CSS世界》閱讀筆記,持續更新CSS筆記
- 【Elasticsearch學習】DSL搜尋大全(持續更新中)Elasticsearch
- 學習 Laravel —— 前端篇(持續更新)Laravel前端
- Kubernetes學習筆記(更新中。。。。)筆記
- 鴻蒙OS學習資料整理,持續更新中鴻蒙
- PHP 的自動載入(持續學習更新中)PHP
- 【筆記】從0開始的sql注入漏洞學習(持續更新直到完結)筆記SQL
- 2020年大資料學習大綱(持續更新中...)大資料
- 機器學習完整資源推薦(持續更新中)機器學習
- 【少用會忘】PHP 函式筆記(持續更新)PHP函式筆記
- 《Python 簡明教程》讀書筆記(持續更新)Python筆記
- [oracle零碎筆記]oracle零碎筆記(持續更新…)Oracle筆記
- 前端學習資源彙總(持續更新)前端
- Kotlin學習資料彙總(持續更新...)Kotlin
- 線段樹學習筆記(更新中)筆記
- C語言初學習——易錯點合集(持續更新中)C語言
- 2021年最新整理, C++ 學習資料[持續更新中]C++
- 學習《Java虛擬機器》目錄索引(持續更新中)Java虛擬機索引
- git使用、持續更新中Git
- 【Mysql原理和原始碼學習記錄】學而思網校早讀會--持續更新中MySql原始碼
- 如果你也打算學習 Spring Cloud [持續更新]SpringCloud
- (持續更新)Qt3D 學習資源QT3D