你在这里

几个问题,决定了我是否会继续drupal之路:

主标签

首先,我并不是一个小白用户,互联网从业四年,当然,也还没达到一个超级开发人员的水平,只是用php+mysql做商城(纯手写的,没有用框架,当然,三四线城市的需求,没有那么强大),做过企业站,熟练掌握jqurey与dedecms,及其二次开发,最近突然蒙发其想,想转投drupal,只是研究了半个月时间,有几个问题让我百思不得其解:

1,为什么一个内容类型,加个字段,数据库里就得加一张表?这样子有什么好处?与dede的自定义模型,加个字段,就是在一个自定义的模型表里,真的加一个字段而已,drupal的这种作法,如果要做一个复杂点的医院网站的话,那数据库不就得加到个两三百张的吗?这也太繁杂了,难道分开这么多表,会有利于性能的提升?

2,drupal后台运行迟缓,即使刚刚安装下来的,也完全没有dede的后台快,无论在本地wamp环境中,还是在服务器上lamp环境中,都运行缓慢,叫人着急。

3,前台未登录用户的访问速度还可以,但一旦登录了之后,就开始迟缓了起来,这是为什么?这样的情况,真的适合来做一个社区或者是论坛型的网站吗?

4,drupal搭出来的站点,如果做医院网站的专题页,该如何进行,只能直接使用静态页面吗?

5,drupal的前端表现页,为什么这么复杂差劲,为什么它不能像dede一下,用个htm模板,数据内容直接在htm模板中,用标签进行调用,这么直观地表现出来呢?

6,dede,对一个前端人员来讲,只需要学会使用它的标签,就可以直接来写dede的页面了,但drupal,居然还得要求有种类后台内容的种种配置,更别提使用一些模块之后,那产生出来的各种乱七八糟的代码,是如何是让前端人员抓狂了?难道,drupal真的只是一个人的开发?

7,drupal生成文章时的路径问题,怎么就那么地复杂?路径层级太深(clean url之后,也有三、四层结构),这种东西,怎么会有利于蜘蛛的抓取?

8,drupal的缓存,难道会比dede所生成的静态页面,响应速度更好的吗?

                            未完待续……
                               2015-8-25

Drupal 版本: 

猜你喜欢

1. http://drupal001.net/question/1845

2. 3 8 都是性能优化的范畴,drupal默认 没有做太多性能优化,具体可以看 http://www.drupal001.com/?s=%E6%80%A7%E8%83%BD 如何做性能优化  ,以及 drupal high performance 的电子书

4 drupal不存在静态页, 都是动态输出的,通过模块,可以把动态页面静态化

5 drupal 有完善的主题开发模板机制, 7的模板是php混编,实用不太优雅  drupal 主题开发系列文章 http://drupalchina.cn/theming 

6 drupal 也有类似mvc的分层, 内核,模块,主题 的分层, 传统的合作开发就是 后端模块开发,前端主题开发协同合作  。 drupal 是一个框架,有其他框架(如django,rails)相通的共性,比如router, hook,cache等,不是一个php混编搭建的工具, 有框架使用经验的人 很容易上手。

7 drupal恰恰对seo 有非常好的支持  无论是路径的高度定制化,还是元素标签的灵活掌控,以及到各个搜索引擎的结合

我觉得dede和Drupal是两个不同属性的东西,所以直接类比是有失偏颇的。dede是纯粹的CMS,你可以用来做门户,做企业网站,从这个角度,网站结构,内容类型都是比较简单的,但Drupal不一样,Drupal是CMF,如果让Drupal做同样的事情,我们只需要在Drupal上加一层约束,就可以达到和dede同样的效果,但Drupal最大的特色是扩展性,你可以用Drupal创业,做你想做的任何复杂逻辑,比如目前比较火的在线教育项目,互联网金融项目等,而dede在这方面是无力的。

下面就你的几个问题,我回答一下,为了增加一点点分量,我也自我介绍一下,04年开始做PHP开发,09年转Drupal,截止目前有6年多Drupal开发经验,11年PHP开发经验,我结合我的理解回答你的问题,未必全对,仅供参考。

1. Drupal默认安装中,最大化的考虑的是灵活性,然后考虑的是性能,Drupal的一个字段一个表的方式就体现出这一特点,首先这样很灵活,其次并没有太影响性能,至于操作这样的多表,Drupal有抽象的API层可以用。当然如果你想用传统的一张表存储多个字段,也是可以做到的,只是需要额外的模块和编码。

2. 关于Drupal慢的问题确实是存在的,这可能可以算是Drupal灵活性的副作用,一直以来Drupal都是在保证灵活性的前提下进行性能优化,所以最常用的优化方式仍然是缓存。也就是说对于一个复杂度比较高的项目来说,没有缓存的时候确实比较慢。如果是开发环境,建议购买高配的电脑,并且需要开启一些优化方案,比如apc, memcache。

3. Drupal默认是支持匿名用户缓存的,但注册用户缓存的支持模块也是有的,只是更复杂,不是开箱即用的方案。

4. 专题系统不是Drupal的默认支持的,通过安装一些模块可以实现,Drupal里很多功能都需要借助模块并且需要配置才行。

5. 同理,Drupal前端机制也是为了最大限度的灵活性,我们可以在上层建立一个针对具体业务场景的数据访问标签,从而达到和dede同样的效果,不过当你可以完全hold住主题层的时候,往往会觉得数据访问标签的方式不够灵活,最终还是用Drupal的方式解决问题。

6. Drupal为了保证开发效率,模块一般确实会输出一些默认的代码结构,这样可以快速生成页面,如果有的前端有一点代码洁癖,需要完全把控所有输出的HTML,也是可以做到的,当然这会增加工作量。

7. 这个问题最好回答,Drupal的路径分为内部路径和别名,别名完全是自定义的,你可以借助Pathauto模块,按照自己希望的方式组织网站的路径结构。

8. dede的缓存机制是内置的,也没有太多灵活性,基本就是静态化,也可以说这样就已经将优化做到极致,但Drupal在灵活性的前提下,优化方案也不是单一的,有时要借助系统软件,比如Varnish,Boost, Memcache, Opcache。Drupal的使用场景比较复杂,仅仅具有静态化是不够的,而且Drupal也是可以支持全面静态化的,需要安装模块而已。

总之,Drupal和dede完全不同,Drupal要比dede复杂几个数量级,可以做更多的事情,需要更全面的知识才能驾驭,有一定的性能问题,但可以通过性能优化解决。用dede你感觉你在做一个网站,用Drupal,你感觉你在做一个系统,做一个解决方案,不在一个层次上。

Drupal项目社区创始人,提供模块和API本地化等基础服务。

关于第4点专题,目前用的比较多的,可能是panels + views模块结合。

yplam还开发了一个模块,目前还在官网的sandbox里:https://github.com/yplam/special_topic,这个模块的使用教程请查看《Drupal 制作网站专题的尝试,分享special_topic模块

另外,理查还推荐了一个发行版:http://www.drupalproject.org/project/panopoly,这个发行版默认就带了专题的功能,不妨研究一下。

Drupal China http://drupalchina.cn

专题这个问题,我认为从 构建+模板 方式就可以很好的解决,例如:内容类型增加  1为专题主页类型、2为专题内容页类型,2内容类型添加个refer字段关联1内容类型;利用taxonomy + node_queue 控制2类型的归类和分组排序;template这里定义1内容类型的page和node模板只输出content,这样发布专题主页的时候可以在node内容中发布自定义自由度很高的html代码。

1.字段分表可以避免有一种情况:你的数据类型字段太多的话,mysql表容量是有上限的,一张表放不了太多的字段,D6时就是一张表存放一个内容类型的所有字段,之前遇到过这个问题。

如果对性能有高要求,不建议使用太多模块搭积木式的做功能。有些功能你可以自己建表实现,不必所有都是节点。比如登录注册你都可以自定义实现,不走drupal的正规全套流程,但是要自定义的话,api还是要了解熟悉的。如果你是刚接触drupal,可能做不到随心定制,一开始都是求快速开发,先多做一下服务器级别的性能优化,后期慢慢的再优化改版模块功能。

4.专题这个问题,以我对phpcms的了解,它们的专题一般都是有固定的针对性的内容类型。比如视频,新闻,产品。包含了数据表设计和一套固定的模版套系。而drupal不是这类的cms,它只提供你最基础的数据结构和模版机制,你可以扩展到任何主题类型。

5.你这么问,还是因为看到它们有提供专题模版里的标签,是现成的!咱们的模版也都是有变量定义的方法的,只不过我们没有预先设好你要的主题,所以没有现成的业务标签给你用,只有一些基础的变量使用,但基本也都够了,比如节点页模版,相当于你的专题内容单页。怎么呈现就看你的设计了。

6.你完全可以只把drupal当作一个数据结构+api提供者,前台自己写html来调用后台数据输出呈现,不用views,panels这些html结构提供者,甚至也不用区块,区域的概念。这种流程就是先有切图,再套数据。要求你对主题模版机制和相关api都熟悉。随着猪龄越来越高,可能会更喜欢向这种方式转移...也不再是all is node!控制更灵活,前端更简洁,性能也更好。

8.静态页面,drupal有第三方boost模块可以生成,只不过默认没有而已,因为不是所有项目都需要静态页面的。

 

一生有你,Drupal!

才学半年,从发言来看, 主题也没有入门。

好好看看我的教材,主题会马上入门。

我要可是学了两年,也没有搞懂drupal的主题。后来学了magento才明白国外cms主题的大概思路。

drupal不像magento那么明显,隐藏的很深,比如一个字段,magento有明显的对象输出,可是在drupal,却层级太多,比如field_image后面还有什么[und][0][uri]之类。

虽然如此,本质是一样,drupal就是这样多绕了几下。

你会php,就应该知道后台会给前台一个对象或数组。这就是数据,有了这些数据,在模板里,用一点点php技巧,你就可以尽情发挥了。

可是到了drupal8,却用了twig这种标签引擎,这才是最大的问题,不知到时怎么再尽情发挥了。始终认为一个成熟的cms用twig是一种倒退。

流云说的第5点,我就是这样弄的。 可是到了twig,还不明了。

---

至于理查说的,覆写模板,会增加工作量,这是相对的,会增加程序员的工作量。

但是不覆写,就会增加前端的工作量。所以对于整个团队来说,工作效率影响并不大。

可能是些大项目,对前端要求不高。对psd还原效果也没什么要求,这时可能就不用太多覆写。

如果对psd还原要求高的话,不覆写,那前端会很累的。

 

 

我在实际中遇到不同的主题制作流程:

  1. 后端先输出内容,主题开发者再按照设计图制作主题。
  2. 前端先切图,后端用Drupal的布局方式(Panels, Display Suite等)创建主题,通过覆写模板或函数来还原前端的切图。
  3. 前端先切图,后端直接使用前端制作好的静态HTML作为页面模板框架来创建主题(如流云说的第6点)。

目前我倾向于使用第3种,大家使用的是哪种流程?

简单发表一下个人的建议。

1. 每一个框架或者系统都有不如其他系统的地方。比如你那个A框架的一个毛病跟B框架对比,肯定不合适。

2. Drupal复杂性确实高,这个是缺点。

3. 国外系统跟国内系统用户差距太大,没法比。

4. 选择最好的工具和最合适的工具,Dede能做的Drupal不一定合适,Drupal能做的DD也不一定合适。