2010-02-22 Poor-ly structured Drupal site ever seen

Drupal template system is so flexible that you can do anything in node.tpl.php

This let chaos happens in a site i maintain, which made my pull my hair out of my head. (sort of)

That is a classic example that more power bring a larger disaster.
The developer that leaves the project even define a form , its hook_validate() and its hook_submit() inside the node.tpl.php. TOTALLY INSANE.

As a professional developer, not a part time one, YOU SHOULD TAKE RESPONSIBILITY TO YOUR CODE!!
so, you should:

  • avoid any node_load() in *.tpl.php (should be in custom module or preprocess function)
  • avoid any complex PHP code in custom block content, and visibility settings. Build a custom module will only cost you 5 mins
  • multi site settings should be carefully planned
  • DOCUMENTATION on your magic tricks
  • 山寨就是貌似做到一樣, 但細緻就不行了

God bless me, please open new projects instead of fixing old ones.

Drupal 模組開發

模組開發是需要你有 PHP 的開發能力的
一般的想法是, contributed module 做不到我想要的功能
便自己開發一個
但其實, 遇到這樣的情況的機會實在不多
因為 Drupal 的用戶群已經足夠大了, 一般的問題都會有模組解決
但遇到定製的需求, 為了代碼維護性, 完整性, 便免不了需要自己寫一個module 了

Module development - introduction [module].info

要自己建立一個 module, 先要跟從 Drupal 的一些規定
令 Drupal 知道有這麼一個新的 module 存在

假設要寫的是一個名為 my_module 的模組 (真正的模組只可以使用 a 到 z 和 _ )

  1. 先到 sites/all/modules 建立一個資金夾, 名為 my_module
  2. 在資料夾之內建立兩個檔案
    1. my_module.info (模組的基本資料)
    2. my_module.module (模組的 php code)

my_module.info: (只介紹最基本的要求, 以後再補上非必要的設定)

//不需要 <?php
; $Id$
name = "My module"
description = "模組簡介"
core = 6.x

ref: Writing .info files (Drupal 6.x) http://drupal.org/node/231036

而 my_module.module 內基本上沒有必需的內容
但在這個時候便適合介紹 hook 系統了

你會在 Drupal 的教學看到很多 hook_block(), hook_help()
hook 是什麼?
其實, 每一個 module 都可以使用這些 hook 令 Drupal core 可以使用模組提供的功能
在 my_module.module 的例子, 我應該 declare

function my_module_block() {}

作為 "使用 hook_block()", 或者
function my_module_help(){}

作為 hook_help()
"hook" 是要變為你的模組名, 以區分不同模組之下的相同 hook

下一篇會慢慢介紹各個常用的 hook

ref: Creating Modules http://drupal.org/node/206753

views 中只顯示屬於自己角色的頁面

來自社區的一個問題: http://drupalchina.org/node/8514#comment-26113
比如我是 "writer" role, 我想要一個頁面都是 writer role 的用戶的nodes:

views 的 argument 應:
加, User:roles -> Provide default argument
Default argument type: PHP code:

<?php
global $user;
$roles = implode("+",array_keys($user->roles));
return
$roles;
?>

再選 Allow multiple terms per argument.

解說: 先拿到用戶object
再拿出用戶的所在的 role id
因為可以多個role, 需要implode 成 2+5
Allow multiple terms per argument 便會 OR role id 了

2010-02-10 轉hosting 了

原本使用hostmonster 的, 因為有shell access, 好玩, 可以開svn server, samba
但就是慢了點, 而且我都有自己的svn server 了
現在不太需要另一個shell 了

所以轉了本地存取較快的icdsoft
只提供php, mysql, ftp, 10G space, 夠用就好了, 其他專門服務還是找專門的hosting 吧

大家試試有沒有網頁快了?

Pages

Google