正在折腾drupal的同志们,这篇文章来解决你们头昏那个脑涨的问题啦。总结了一些经验,几记录下来备用。具体如下:
一 安装相关
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 主题出问题后强制恢复系统默认主题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="pln">UPDATE system SET status </span><span class="pun">=</span> <span class="lit">0</span><span class="pln"> WHERE type </span><span class="pun">=</span> <span class="str">'theme'</span><span class="pun">;</span><span class="pln"> UPDATE system SET status</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> WHERE type</span><span class="pun">=</span><span class="str">'theme'</span><span class="pln"> AND </span><span class="pun">(</span><span class="pln">name </span><span class="pun">=</span> <span class="str">'seven'</span><span class="pln"> OR name </span><span class="pun">=</span> <span class="str">'bartik'</span><span class="pun">);</span><span class="pln"> TRUNCATE cache</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_block</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_bootstrap</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_field</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_filter</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_form</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_image</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_menu</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_path</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_page</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_update</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_views</span><span class="pun">;</span><span class="pln"> TRUNCATE cache_views_data</span><span class="pun">;</span> |
2 获取当前页的模版文件列表
在你使用的当前主题文件夹下有个template.php,在其中的xxxxx_process_page方法代码块中(没有就建立)增加一下代码:
1 |
<span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'theme_hook_suggestions'</span><span class="pun">]);</span> |
例如:
1 2 3 |
<span class="kwd">function</span><span class="pln"> wesley_process_page</span><span class="pun">(&</span><span class="pln">$variables</span><span class="pun">){</span><span class="com">//其中wesley是我的主题名称</span><span class="pln"> var_dump</span><span class="pun">(</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'theme_hook_suggestions'</span><span class="pun">]);</span> <span class="pun">}</span> |
这样你随便打开某个页面就会在页首打印出该页获取的模版文件的顺序以及模版文件名称,一目了然,注意系统加载的优先级顺序是倒序的。而不用去翻n多文档,实验n次,纠结n次了。。。,明眼人可能看出来了,变量列表中的theme_hook_suggestions就是模版信息数组。你其实可以随便修改定制的。。。呃,慎重,最好按照后面一个小结的方法来增加。
3 自定义模板文件名称
有时候你想根据特定的格式来获取模版文件。举个例子,如果你想根据内容类型来制定模版,那么你可以同样在template.php中xxxxx_process_page方法中增加一下代码
1 2 3 4 5 |
<span class="com">//增加模版选择器</span> <span class="kwd">if</span> <span class="pun">(!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">]))</span> <span class="pun">{</span><span class="pln"> $node </span><span class="pun">=</span><span class="pln"> $variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">];</span><span class="pln"> $variables</span><span class="pun">[</span><span class="str">'theme_hook_suggestions'</span><span class="pun">][]</span> <span class="pun">=</span> <span class="str">'page__type__'</span> <span class="pun">.</span><span class="pln"> $node</span><span class="pun">-></span><span class="pln">type</span><span class="pun">;</span> <span class="pun">}</span> |
这样当drupal打开某内容的页面时,将优先使用你定义的模版文件,是不是貌似很吊?当然更改之后记得清空系统自己的缓存,要不然它依然会加载之前默认的模板,只需执行一下:
1 |
<span class="kwd">delete</span> <span class="kwd">from</span><span class="pln"> cache</span> |
另外值得一提的是HOOK的复写,上面的xxxxx_process_page其实就是 hook_process_HOOK的复写,而drupal加载这些HOOK的顺序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<span class="pln">template_preprocess</span><span class="pun">()</span><span class="pln"> template_preprocess_hello</span><span class="pun">()</span><span class="pln"> helloModule_preprocess</span><span class="pun">()</span><span class="pln"> helloModule_preprocess_hello</span><span class="pun">()</span><span class="pln"> phptemplate_preprocess</span><span class="pun">()</span><span class="pln"> phptemplate_preprocess_hello</span><span class="pun">()</span><span class="pln"> helloTheme_preprocess</span><span class="pun">()</span><span class="pln"> helloTheme_preprocess_hello</span><span class="pun">()</span><span class="pln"> template_process</span><span class="pun">()</span> <span class="kwd">function</span><span class="pln"> diantang_process</span><span class="pun">(&</span><span class="pln">$variables</span><span class="pun">,</span><span class="pln">$hook</span><span class="pun">){</span><span class="pln"> $node </span><span class="pun">=</span><span class="pln"> $variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">];</span> <span class="kwd">switch</span> <span class="pun">(</span><span class="pln">$hook</span><span class="pun">)</span> <span class="pun">{</span> <span class="kwd">case</span> <span class="str">'comment'</span><span class="pun">:</span><span class="pln"> $variables</span><span class="pun">[</span><span class="str">'theme_hook_suggestions'</span><span class="pun">][]=</span><span class="str">'comment__'</span><span class="pun">.</span><span class="pln">$node</span><span class="pun">-></span><span class="pln">type</span><span class="pun">;</span> <span class="kwd">break</span><span class="pun">;</span> <span class="kwd">case</span> <span class="str">'page'</span><span class="pun">:</span> <span class="kwd">if</span> <span class="pun">(!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">])){</span><span class="pln"> $variables</span><span class="pun">[</span><span class="str">'theme_hook_suggestions'</span><span class="pun">][]</span> <span class="pun">=</span> <span class="str">'page__type__'</span> <span class="pun">.</span><span class="pln"> $node</span><span class="pun">-></span><span class="pln">type</span><span class="pun">;</span> <span class="pun">}</span> <span class="kwd">break</span><span class="pun">;</span> <span class="kwd">default</span><span class="pun">:</span> <span class="kwd">break</span><span class="pun">;</span> <span class="pun">}</span> <span class="pun">}</span> |
4 动态改变当前页面所对应的菜单项
依然是在xxxxx_process_page中增加以下代码:
1 2 3 4 5 6 7 8 9 10 |
<span class="kwd">if</span> <span class="pun">(!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">]))</span> <span class="pun">{</span><span class="pln"> $node </span><span class="pun">=</span><span class="pln"> $variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">];</span> <span class="com">//所有的 'selftype' 类型的node的menu设置成为其对应的tag的菜单项</span> <span class="kwd">switch</span> <span class="pun">(</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">]-></span><span class="pln">type</span><span class="pun">)</span> <span class="pun">{</span> <span class="kwd">case</span> <span class="str">'selftype'</span><span class="pun">:</span><span class="pln"> $tid</span><span class="pun">=</span><span class="pln">$variables</span><span class="pun">[</span><span class="str">'node'</span><span class="pun">]-></span><span class="pln">field_tags_news</span><span class="pun">[</span><span class="str">'und'</span><span class="pun">][</span><span class="lit">0</span><span class="pun">][</span><span class="str">'tid'</span><span class="pun">];</span><span class="pln"> menu_set_active_item</span><span class="pun">(</span><span class="str">'taxonomy/term/'</span><span class="pun">.</span><span class="pln">$tid</span><span class="pun">);</span> <span class="kwd">break</span><span class="pun">;</span> <span class="pun">}</span> <span class="pun">}</span> |
这样,如果当前页面的内容类型是selftype的话,那么当前激活的菜单就将是该内容类型对应的标签。其中menu_set_active_item中设置的是 菜单项的系统地址。
三 一些常用的方法
1 获取,node中自定义的字段
1 2 |
<span class="pln">$node</span><span class="pun">=</span><span class="pln"> node_load</span><span class="pun">(</span><span class="lit">12</span><span class="pun">);</span><span class="pln"> $items </span><span class="pun">=</span><span class="pln"> field_get_items</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span><span class="pln"> $node</span><span class="pun">,</span> <span class="str">'field_image'</span><span class="pun">);</span> |
2 获取node中自定义字段的可以render显示的数组:
1 2 3 4 |
<span class="pln">$node</span><span class="pun">=</span><span class="pln"> node_load</span><span class="pun">(</span><span class="lit">12</span><span class="pun">);</span><span class="pln"> $items </span><span class="pun">=</span><span class="pln"> field_get_items</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span><span class="pln"> $node</span><span class="pun">,</span> <span class="str">'field_image'</span><span class="pun">);</span><span class="pln"> $output </span><span class="pun">=</span><span class="pln"> field_view_value</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span><span class="pln"> $node</span><span class="pun">,</span> <span class="str">'field_image'</span><span class="pun">,</span><span class="pln"> $items</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span> <span class="kwd">print</span><span class="pln"> render</span><span class="pun">(</span><span class="pln">$output</span><span class="pun">);</span> |
3 获取node中某文件字段(图片,媒体)的地址
1 2 3 |
<span class="pln">$node</span><span class="pun">=</span><span class="pln"> node_load</span><span class="pun">(</span><span class="lit">12</span><span class="pun">);</span><span class="pln"> $items </span><span class="pun">=</span><span class="pln"> field_get_items</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span><span class="pln"> $node</span><span class="pun">,</span> <span class="str">'field_image'</span><span class="pun">);</span><span class="pln"> $url</span><span class="pun">=</span><span class="pln"> file_create_url</span><span class="pun">(</span><span class="pln">$items</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="str">"uri"</span><span class="pun">])</span> |
4 drupal 中现在已经内置了jquery和jqueryui模块,但是jquery至增加了core,比如我们要加一个tabs;
1 2 |
<span class="pln">drupal_add_library</span><span class="pun">(</span><span class="str">'system'</span><span class="pun">,</span> <span class="str">'ui.tabs'</span><span class="pun">);</span><span class="pln"> drupal_add_js</span><span class="pun">(</span><span class="str">'jQuery(document).ready(function(){jQuery( "#mytabs" ).tabs();});'</span><span class="pun">,</span> <span class="str">'inline'</span><span class="pun">);</span> |
5 drupal中常用的模块api
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<span class="com">// node</span><span class="pln"> node_load</span><span class="pun">(</span><span class="pln">$nid </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> $vid </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> $reset </span><span class="pun">=</span><span class="pln"> FALSE</span><span class="pun">);</span><span class="pln"> node_load_multiple</span><span class="pun">(</span><span class="pln">$nids </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(),</span><span class="pln"> $conditions </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(),</span><span class="pln"> $reset </span><span class="pun">=</span><span class="pln"> FALSE</span><span class="pun">);</span> <span class="com">// user</span><span class="pln"> user_load</span><span class="pun">(</span><span class="pln">$uid</span><span class="pun">,</span><span class="pln"> $reset </span><span class="pun">=</span><span class="pln"> FALSE</span><span class="pun">);</span><span class="pln"> user_load_multiple</span><span class="pun">(</span><span class="pln">$uids </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(),</span><span class="pln"> $conditions </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(),</span><span class="pln"> $reset </span><span class="pun">=</span><span class="pln"> FALSE</span><span class="pun">);</span> <span class="com">// menu tree</span><span class="pln"> menu_tree_all_data</span><span class="pun">(</span><span class="pln">$menu_name</span><span class="pun">,</span><span class="pln"> $link </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> $max_depth </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">);</span><span class="pln"> menu_tree_page_data</span><span class="pun">(</span><span class="pln">$menu_name</span><span class="pun">,</span><span class="pln"> $max_depth </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> $only_active_trail </span><span class="pun">=</span><span class="pln"> FALSE</span><span class="pun">);</span> <span class="com">// term</span><span class="pln"> taxonomy_term_load</span><span class="pun">(</span><span class="pln">$tid</span><span class="pun">)</span> <span class="pun">:</span> <span class="kwd">object</span><span class="pln"> taxonomy_term_load_multiple</span><span class="pun">(</span><span class="pln">$tids </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(),</span><span class="pln"> $conditions </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">())</span> <span class="pun">:</span><span class="pln"> array taxonomy_get_tree</span><span class="pun">(</span><span class="pln">$vid</span><span class="pun">,</span><span class="pln"> $parent </span><span class="pun">=</span> <span class="lit">0</span><span class="pun">,</span><span class="pln"> $max_depth </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> $load_entities </span><span class="pun">=</span><span class="pln"> FALSE</span><span class="pun">)</span> <span class="pun">:</span><span class="pln"> array </span><span class="com">// block</span><span class="pln"> block_load</span><span class="pun">(</span><span class="pln">$module</span><span class="pun">,</span><span class="pln"> $delta</span><span class="pun">);</span> |
四 一些数据库操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<span class="com">// select</span><span class="pln"> db_select</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span> <span class="str">'n'</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">extend</span><span class="pun">(</span><span class="str">'PagerDefault'</span><span class="pun">)-></span><span class="pln">limit</span><span class="pun">(</span><span class="lit">5</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">fields</span><span class="pun">(</span><span class="str">'n'</span><span class="pun">);</span><span class="pln"> $statement</span><span class="pun">-></span><span class="pln">fetchField</span><span class="pun">();</span><span class="pln"> db_query_range</span><span class="pun">(</span><span class="str">'SELECT n.nid, n.title, n.created FROM {node} n WHERE n.uid = :uid'</span><span class="pun">,</span> <span class="lit">0</span><span class="pun">,</span> <span class="lit">10</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="str">':uid'</span> <span class="pun">=></span><span class="pln"> $uid</span><span class="pun">));</span> <span class="com">// insert</span><span class="pln"> $fields </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'nid'</span> <span class="pun">=></span> <span class="lit">1</span><span class="pun">,</span> <span class="str">'title'</span> <span class="pun">=></span> <span class="str">'my title'</span><span class="pun">,</span> <span class="str">'body'</span> <span class="pun">=></span> <span class="str">'my body'</span><span class="pun">);</span><span class="pln"> db_insert</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">)-></span><span class="pln">fields</span><span class="pun">(</span><span class="pln">$fields</span><span class="pun">)-></span><span class="pln">execute</span><span class="pun">();</span> <span class="com">// update</span><span class="pln"> db_update</span><span class="pun">(</span><span class="str">'example'</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">condition</span><span class="pun">(</span><span class="str">'id'</span><span class="pun">,</span><span class="pln"> $id</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">fields</span><span class="pun">(</span><span class="pln">array</span><span class="pun">(</span><span class="str">'field2'</span> <span class="pun">=></span> <span class="lit">10</span><span class="pun">))</span> <span class="pun">-></span><span class="pln">execute</span><span class="pun">();</span> <span class="com">// select</span><span class="pln"> $query </span><span class="pun">=</span><span class="pln"> db_select</span><span class="pun">(</span><span class="str">'comment'</span><span class="pun">,</span> <span class="str">'c'</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">fields</span><span class="pun">(</span><span class="str">'c'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'subject'</span><span class="pun">,</span> <span class="str">'name'</span><span class="pun">))</span> <span class="pun">-></span><span class="pln">fields</span><span class="pun">(</span><span class="str">'n'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'title'</span><span class="pun">))</span> <span class="pun">-></span><span class="pln">extend</span><span class="pun">(</span><span class="str">'PagerDefault'</span><span class="pun">)-></span><span class="pln">limit</span><span class="pun">(</span><span class="lit">5</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">condition</span><span class="pun">(</span><span class="str">'n.type'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'article'</span><span class="pun">),</span> <span class="str">'IN'</span><span class="pun">)</span> <span class="pun">-></span><span class="pln">orderBy</span><span class="pun">(</span><span class="str">'c.cid'</span><span class="pun">,</span> <span class="str">'DESC'</span><span class="pun">);</span><span class="pln"> $query</span><span class="pun">-></span><span class="pln">join</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span> <span class="str">'n'</span><span class="pun">,</span> <span class="str">'n.nid = c.nid'</span><span class="pun">);</span><span class="pln"> $statement </span><span class="pun">=</span><span class="pln"> $query</span><span class="pun">-></span><span class="pln">execute</span><span class="pun">();</span><span class="pln"> $query </span><span class="pun">=</span><span class="pln"> db_select</span><span class="pun">(</span><span class="str">'node'</span><span class="pun">,</span> <span class="str">'n'</span><span class="pun">)-></span><span class="pln">fields</span><span class="pun">(</span><span class="str">'n'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'title'</span><span class="pun">))-></span><span class="pln">distinct</span><span class="pun">();</span><span class="pln"> $query</span><span class="pun">-></span><span class="pln">join</span><span class="pun">(</span><span class="str">'taxonomy_index'</span><span class="pun">,</span> <span class="str">'t'</span><span class="pun">,</span> <span class="str">'t.nid = n.nid'</span><span class="pun">);</span><span class="pln"> $or </span><span class="pun">=</span><span class="pln"> db_or</span><span class="pun">()-></span><span class="pln">condition</span><span class="pun">(</span><span class="str">'n.uid'</span><span class="pun">,</span><span class="pln"> $authorId</span><span class="pun">)-></span><span class="pln">condition</span><span class="pun">(</span><span class="str">'t.tid'</span><span class="pun">,</span><span class="pln"> $cats</span><span class="pun">,</span> <span class="str">'IN'</span><span class="pun">);</span><span class="pln"> $query</span><span class="pun">-></span><span class="pln">condition</span><span class="pun">(</span><span class="pln">$or</span><span class="pun">)-></span><span class="pln">execute</span><span class="pun">();</span> <span class="com">// fetch</span> <span class="kwd">foreach</span> <span class="pun">(</span><span class="pln">$query</span><span class="pun">-></span><span class="pln">execute</span><span class="pun">()</span> <span class="kwd">as</span><span class="pln"> $object</span><span class="pun">)</span> <span class="pun">{</span><span class="pln"> echo $object</span><span class="pun">-></span><span class="pln">name</span><span class="pun">;</span> <span class="pun">}</span> |
