主題: 默认启用外挂? 作者: maomaode 於 一月 04, 2006, 09:20:27 上午 Hi,
我问一个问题, 目前外挂在默认方式下都是”未启用“, 我在想是否有选项, 或者通过编写代码使得默认方式变为“启用” 也就是说, 在外挂安装上后, 这个外挂就处于“启用”状态呢? 主題: Re: 默认启用外挂? 作者: lss 於 一月 04, 2006, 09:29:41 上午 hi maomaode:
很多人問過了,請等 1.1 版,或是等不及的話就自己動手吧! 你可以參考 api 文件裡的 bloginfo 類別。我沒記錯的話,外掛的屬性都是存在 bloginfo 裡面的。 lss 主題: Re: 默认启用外挂? 作者: maomaode 於 一月 04, 2006, 09:36:18 下午 Hi lss,
仅修改bloginfo就ok吗? bloginfo好像只是一个dataobject, 可以取出blogsetting, 是把外挂的enable属性设置为true加入blogsetting,是这样吗?可不可以再给点提示,我想实验一下, 谢谢! 主題: Re: 默认启用外挂? 作者: lss 於 一月 04, 2006, 10:15:52 下午 hi maomaode:
抱歉,我果然記錯了 :-$ 不是使用 bloginfo ,而是使用 blogSettings 類別,用他的 setValue 方法來將預設的 plugin_xxx_enabled 屬性設為 true 。 以 authimage 為例,修改 pluginauthimage.class.php 裡面的 register() 方法如下: 引用 function register() 如入紅色的部份即可。這三行是先判斷 blogSettings 裡面是否已經有儲存 plugin_authimage_enabled 的值,如果沒有,那表示從未設定過,就自動加入預設值為 true ,並重新取得設定後的值。做這樣的修改,只要是還沒儲存過這個 plugin 設定值的 blog 應該都適用。這些修改理論上在防垃圾干擾的外掛應該都可以用吧!請你試試看囉!記得來分享成果哦!{ $config =& Config::getConfig(); $this->cacheFolder = $config->getValue('temp_folder'); $this->cacheFolder = $this->cacheFolder.'/authimage/'.$this->blogInfo->getId(); if( !File::exists( $this->cacheFolder )) { File::createDir( $this->cacheFolder ); } $blogSettings = $this->blogInfo->getSettings(); $this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" ); if ( empty($this->pluginEnabled) ) { $blogSettings->setValue( "plugin_authimage_enabled", true ); $this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" ); } $this->length = $blogSettings->getValue( "plugin_authimage_length" ); $this->key = $blogSettings->getValue( "plugin_authimage_key" ); $this->expiredTime = $blogSettings->getValue( "plugin_authimage_expiredtime" ); if ($this->expiredTime == "") $this->expiredTime = 3600; $this->default = $blogSettings->getValue( "plugin_authimage_default" ); } lss 主題: Re: 默认启用外挂? 作者: lss 於 一月 04, 2006, 10:50:54 下午 寫了一篇比較詳細一點點的說明,請看看「 如何預設啟用外掛程式? (http://blog.nlhs.tyc.edu.tw/post/2/97)」
lss 主題: Re: 默认启用外挂? 作者: markwu 於 一月 05, 2006, 12:00:05 上午 其實
上面那句話有語病,應該是『我喜歡的方式』。 Mark 主題: Re: 默认启用外挂? 作者: markwu 於 一月 05, 2006, 11:17:21 上午 如果有興趣,可以看看延伸的討論:
http://forums.lifetype.net/viewtopic.php?t=2005 這是用 BlogInfo 來修改,事實上是 BlogInfo 裡面的 BlogSetting。 他可以在註冊的時候就啟動 plugin,但是『既往不咎,展望未來』。 就是只對新 user 有用。 Mark 主題: Re: 默认启用外挂? 作者: maomaode 於 一月 05, 2006, 12:15:38 下午 mark说的对, 应该由管理员来控制会比较好一点,
我已经阅读了lss的文章, 写的蛮详细的,晚上我会来实验一下。谢谢lss lss的做法是修改某一个插件的代码来达到“默认启用” 最好是能在“外挂列表”上可以钩选某一个外挂是否“默认启用”, 不过这个改动会蛮大, 我先考虑考虑, 再动手去做 any other suggestions/comments? 主題: Re: 默认启用外挂? 作者: markwu 於 一月 05, 2006, 12:22:31 下午 會改蠻多的!但是如果你只是自己要用,那麼hard coding 其實救 okay 了。
以後的升級,就要自己照顧自己了 :-P Mark 主題: Re: 默认启用外挂? 作者: Psyche 於 三月 16, 2006, 04:22:42 下午 前教各位前輩
有關迴響驗證的外掛,大致上可以運作,只是有很多模版裡並沒有有關 $authimage 的定義,所以是否必須一個一個模版裡去修改 commentform.template 加入以下程式碼!還是說 有其他的方法嗎? 程式碼: Install: 主題: Re: 默认启用外挂? 作者: bibicall 於 三月 16, 2006, 06:11:56 下午 前教各位前輩 沒有別的辦法,因為每個模版都必須要有那一段程式碼有關迴響驗證的外掛,大致上可以運作,只是有很多模版裡並沒有有關 $authimage 的定義,所以是否必須一個一個模版裡去修改 commentform.template 加入以下程式碼!還是說 有其他的方法嗎? 所以你必須一個個的加上去 主題: Re: 默认启用外挂? 作者: Psyche 於 三月 17, 2006, 10:55:47 上午 沒有別的辦法,因為每個模版都必須要有那一段程式碼 謝謝 bibicall 前輩的回應。所以你必須一個個的加上去 另外,小弟已經在 plugins/authimage/pluginauthimage.class.php 的 function register() 修改為: 程式碼: function register() 請問,我有疏漏什麼步驟嗎? 主題: Re: 默认启用外挂? 作者: php 於 四月 01, 2006, 11:59:18 上午 确实是这样的。我分析了一下,照这种方法修改后,前台页面在进行评论(回复)的区域是默认会显示出Authimage区域的,但自动生成的图片不显示出来。仔细查看数据库中有关bloginfo的参数,却发现里面根本没有有关Authimage的四个参数,所以这个图片是显示不出来的。而且,即使是新注册用户也是这样的。只有用户在后台启用这个插件后,这些参数才会写入至bloginfo,那个图片才会显示出来。所以,前面所说的默认启用还是不能成功实现。
我想,如果能在新用户注册时,自动在新用户的bloginfo中加入有关Authimage参数,这样应该就行的吧。 还没想好具体实施方法。请教各位大侠。 主題: Re: 默认启用外挂? 作者: php 於 四月 01, 2006, 05:16:36 下午 我已经试验成功,将程序中相关各项参数都赋于一个默认的值就行了。这样,不管该用户是否在控制中心设置是否启用插件,都能成功显示验证码了。
有一个问题,就是用户在控制中心是不能自己修改这个插件的参数了。 主題: Re: 默认启用外挂? 作者: maomaode 於 四月 17, 2006, 10:39:31 下午 To php and Psyche :
lss 的回复中有误, 你还需要自己加上 引用 $this->blogInfo->setSettings( $blogSettings ); 这行代码的意思是将blogsettings写回到blogger的设置里, 并写回到数据库里$blogs = new Blogs(); $blogs->updateBlog( $this->blogInfo->getId(), $this->blogInfo ); 所以完整的代码应该是 引用 if ( empty($this->pluginEnabled) ) { $blogSettings->setValue( "plugin_authimage_enabled", true ); $this->blogInfo->setSettings( $blogSettings ); $blogs = new Blogs(); $blogs->updateBlog( $this->blogInfo->getId(), $this->blogInfo ); $this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" ); } 即使这样, 你也没有成功, 应该plugin的其他设置还没写到数据库里面, 想办法取的默认值就可以. Lss, 您可以更新一下你的http://blog.nlhs.tyc.edu.tw/post/2/97吗? thx 主題: Re: 默认启用外挂? 作者: lss 於 四月 18, 2006, 07:35:56 上午 hi maomaode:
謝謝你囉 :-) 當初寫這個部份時,原本就很實驗性質 :-P ,正是要靠大家一起來完善他 :-) 我會先在我的文章中加個連結過來。最近很忙,再找時間研究看看。 lss 主題: Re: 默认启用外挂? 作者: maomaode 於 四月 18, 2006, 04:16:46 下午 这里给出最终解决方案;
将原来的register方法修改成如下: 引用 $config =& Config::getConfig(); $this->cacheFolder = $config->getValue('temp_folder'); $this->cacheFolder = $this->cacheFolder.'/authimage/'.$this->blogInfo->getId(); if( !File::exists( $this->cacheFolder )) { File::createDir( $this->cacheFolder ); } $blogSettings = $this->blogInfo->getSettings(); $this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" ); $this->length = $this->_getSetting( "plugin_authimage_length" , 4); $this->key = $this->_getSetting( "plugin_authimage_key" , "pLog"); $this->expiredTime = $this->_getSetting("plugin_authimage_expiredtime", 3600); $this->default = $this->_getSetting( "plugin_authimage_default", "marble.gif"); if ( empty($this->pluginEnabled) ) { $blogSettings->setValue( "plugin_authimage_enabled", true ); $blogSettings->setValue( "plugin_authimage_length", $this->length ); $blogSettings->setValue( "plugin_authimage_key", $this->key ); $blogSettings->setValue( "plugin_authimage_expiredtime", $this->expiredTime ); $blogSettings->setValue( "plugin_authimage_default", $this->default ); $this->blogInfo->setSettings( $blogSettings ); $blogs = new Blogs(); $blogs->updateBlog( $this->blogInfo->getId(), $this->blogInfo ); $this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" ); 再添加如下方法: 引用 function _getSetting($key, $defaultValue) { $value = $this->blogInfo->_settings->getValue($key); return empty($value) ? $defaultValue : $value; } 应该可以工作了, 不过还是有的小毛病 1。 blogsetting段在pluginauthimageupdateconfigaction.class.php中也出现了, 所以有点重复, 可以提取出来 2。 默认值在pluginauthimage.class.php 中和pluginauthimageconfigview.class.php中同时出现, 应该可以提取出来 3。 pluginauthimage.class.php中的updateBlog没有判断是否成功,没有相关错误处理。 4。最大的一个缺点是, 没有办法关闭这个plugin了 因为register这个方法在每个action触发中都会被调用, 所以当pluginauthimageupdateconfigaction被调用时候, register方法又一次被调用, 导致每次写入的都是register方法里设定的值。 参考adminaction.class.php 的setCommonData()方法。 问题还不少,如何改进就留给读者了吧。。。 主題: Re: 默认启用外挂? 作者: maomaode 於 四月 18, 2006, 07:53:10 下午 这个问题最终还是可以解决,
我已经将具体的解决方案写在 LifeType 外挂如何实现默认启动? (http://maomaode.bokeland.com/blog/3/117/2006/04/18/7396) 主題: Re: 默认启用外挂? 作者: maomaode 於 十一月 27, 2006, 03:12:56 下午 1.1.1 是否已经包含了这个功能?
我们还需要按照这个步骤 (http://maomaode.bokeland.com/blog/3/117/2006/04/18/7396)来实现默认启用外挂吗? 或者说什么时候可以包含到核心里呢? 主題: Re: 默认启用外挂? 作者: panying 於 十一月 27, 2006, 03:24:11 下午 其实我曾经做了一个更通用的插件版本, :-P
可以查看: http://www.pactofshadow.com/lifetype/~nest/article/35.html 最新版本可以察看: http://www.pactofshadow.com/lifetype/~nest/article/53.html 实现就是重载blogsettings.php的function getValue( $key, $defaultValue = null ),然后通过插件判断是否读取默认值,并且有个简陋的界面。 主題: Re: 默认启用外挂? 作者: maomaode 於 十一月 27, 2006, 05:37:07 下午 你的例子 (http://www.pactofshadow.com/lifetype/~nest/article/35.html), 只给出了一个authimage 的设置方法, 如果是有多个plugin的情况下, defaultProperty 和 same setting property 会不会因为放入太多的内容, 而显的零乱.
不过这个想法非常好, 也感谢你的分享 主題: Re: 默认启用外挂? 作者: maomaode 於 十一月 27, 2006, 07:42:05 下午 OK, 看样子, 我们的1.1.1里面还没有加入默认启用外挂这个功能,
我又重新做了调整, 下面是我的解决方案: 1. 在/class/plugin/pluginbase下加入下面两个方法: 引用 function _getSetting($key, $defaultValue) { $value = $this->blogSettings->getValue($key); return empty($value) ? $defaultValue : $value; } function update2Default($defaultValues = null) { $plugin_is_virgin = 'plugin_' . $this->id . '_virgin'; $this->virgin = $this->_getSetting( $plugin_is_virgin, true); if ( empty($this->pluginEnabled) && $this->virgin === true ) { $base = 'plugin_' . $this->id . '_'; $this->blogSettings->setValue( $base . 'enabled', true ); $this->blogSettings->setValue( $base . 'virgin', 'no' ); if (!empty($defaultValues)) { foreach($defaultValues as $key => $value) { $this->blogSettings->setValue($base . $key, $value); } } $this->blogInfo->setSettings( $this->blogSettings ); $blogs = new Blogs(); $blogs->updateBlog( $this->blogInfo ); $this->pluginEnabled = $this->blogSettings->getValue( $base . 'enabled' ); } } 在你所需要默认的plugin 的register 方法末尾添加如下代码: 引用 $this->update2Default(); 引用 $defaultValues = array('length' => $this->length, 'key' => $this->key, 'expiredtime' => $this->expiredTime, 'default' => $this->default ); $this->update2Default($defaultValues); 更详细的内容可以参考LifeType 外挂如何实现默认启动? (续) (http://maomaode.bokeland.com/blog/3/187/2006/11/27/90543) |