再談Seagull框架對theme的設計

11 views
Skip to first unread message

Henry Juan

unread,
Dec 3, 2008, 12:09:51 AM12/3/08
to Seagull中文讨论区
外觀設計在項目中佔非常重要的地位。項目驗收時,客戶對功能代碼通常沒有興趣了解或是沒有能力批評,但是一看到外觀就馬上有意見:不好看、很難用、不夠
直觀….總之,就是要修改。

一個好的開發框架應該要能夠讓開發團隊很容易的修改外觀設計,要能夠讓對框架不熟習的美工很容易上手。能讓美工用他們熟習的設計工具,例如
DreamWeaver,然後將設計作品提交至系統某個目錄,無需依賴程序員修改美工的作品。

Seagull對theme的設計太複雜了!

光是存放與外觀有關文件的目錄就有:

1. www/themes/default
2. www/themes/mytheme
3. module/default/templates
4. module/mymodule/templates
5. module/mymodule/www

加上master模板定義模板之間的套用關係,再加上config.ini指定模板,要說明清楚如何替Seagull設計theme還真不簡單,而且容
易混淆。

我認為應該簡單一點:

1. 將外觀設計的作品集中存放在一個目錄:www/themes/,裏面有許多theme, theme裏面的東西由外觀設計師決定而不是由程
序員決定。theme之間設計重覆的部份可能很多,但就算會犧牲掉reuse,能換得容易維護也是值得的。

2. 模塊使用那一個theme是程序員的事,設定值放在config.ini。

3. 使用者使用那一個theme是使用者的事,設定值放在user preferences

Xinhao Zheng

unread,
Dec 4, 2008, 11:31:42 AM12/4/08
to Seagull中文讨论区
各位好,
下面只代表我的个人观点:
美工在我们的开发过程中的确占有着非常重要的部分,所以一个项目一般需要程序员和美工一起协作来完成,而Seagull的关于主题方面的设计正
是基于此而那样设计的。对于整个站点而言,Seagull的主题是指一系列模板和js,css文件集中在一起放在www/themes/下的某个文件目
录下,不管一个站点需要多少目录,美工所做的也就是提供这些模板及相关文件然后放到这个目录下,这个对于美工而言几乎不需要了解Seagull框架是如
何工作的,最多我们只是告诉他js,css,image要分开放,各个模块的模板放在以各个模块命名的文件夹内,其它的放到default内,目录结构
大致如下:
theme1
---css
---js
---images
---default
------header.html
------banner.html
------footer.html
------master.html
...
...
---module1
---module2

theme2
---css
---js
---images
---default
---module1
---module2

theme3
---css
---js
---images
---default
---module1
---module2


而对于普通用户而言,seagull允许他们可以通过用户偏好设定界面来选择自己要使用哪个主题(除了guest要使用默认设置的主题)。到目前为止整
个主题相关的设计思路是很清晰的。

至于上面提到的模板存放文件的位置太乱的问题,事实上是这样的:
只有在使用flexy作为模板引擎才可能碰到的问题,而且事实上它不是问题,为什么说不能算是个问题a,Seagull是为了减少重复而利用了
flexy的inheritance特点,你可以不使用,seagull没有强迫使用。b,你还可以定义自己的HtmlRender strategy
类,比如flexy2,修改flexy模板引擎的初始配置,然后修改全局配置文件;c,或者你可以选择使用别的模板引擎。

按Seagull目前的设置,seagull查找模板的先后顺序是:
1. www/themes/mytheme/curr-mod/ 当前主题下的当前模块目录下如www/themes/theme1/
module1/
2. www/themes/mytheme/default/ 当前主题下的default目录下如www/themes/
theme1/default/
3. module/curr-mod/templates 当前模块的模板目录如module1/templates/
4. module/global set default module/templates 如果当前模块是module2 则为
module2/template2,右为default,则同5
5. module/default/templates default模块的templates目录 即 default/
templates/

什么时候把模板放在模块的模板目录下呢(上面的第三个搜索)?个人总结认为:当一个模板不需要各个主题提供时,有点像废话,但是确实有,比如这个模板不
是用来显示页面的,而是用来生成的,或者说是一个邮件模板,它不至于需要一个主题提供一份吧。那放在哪里最合适,它又不用于显示,当然是放在模块的模板
目录合适了,要不然哪天移动的时候,发现模块少了某个模板。另外,应该还有这种情况,即一个站点,允许用户自由选择主题,但是其中的一个模块不想或者是
不能换主题,

当然,inheritance也有不好的地方,那就是可能在删除某个主题时造成另外的主题不能正常使用。不过这也正说明了它存在的另一个好处,我们要在
模块的模板目录中放一套完整的模板,让其在找不到时可以像translation的fallback语言一样工作。


希望有所帮助!

On Dec 3, 1:09 pm, Henry Juan <henryr...@gmail.com> wrote:
> 外觀設計在項目中佔非常重要的地位。項目驗收時,客戶對功能代碼通常沒有興趣了解或是沒有能力批評,但是一看到外觀就馬上有意見:不好看、很難用、不夠

> 直觀....總之,就是要修改。

Reply all
Reply to author
Forward
0 new messages