[PC]PHPCMS二次开发指南(上)
-------------------------------------------------------------------------------------
PHPCMS本身功能已经很完善,自带的模块可用可不用,松耦合特性使其非常适合企业的二次开发。
PC的默认路由在 phpcms/caches/configs/route.php 中定义,为content模块下index控制器的init方法
一. PC所有模块都在module目录下,与数据表名字相同;
module目录中文件就是控制器,控制器名与文件名相同;
前台控制器如index.php无须继承任何类,用于前台操作;
后台控制器一般需要继承admin模块的admin类,一旦继承admin就需要权限验证(也可以不继承)。
二. 总结开发后台模块的步骤:
1. 后台访问扩展的模块:
扩展 - 菜单管理 - 添加菜单 - 上级:作为一级菜单(模块名,文件名,方法名)
添加子菜单 - 上级:某个一级菜单(填不存在的模块名,填不存在的文件名,填不存在的方法名)
扩展模块后,需要在v9_module中注册模块!(相当于安装)
2. 创建数据表:
<span>create</span> <span>table</span><span> v9_link( .........</span><span> )engine</span><span>=</span>myisam <span>default</span> charset<span>=</span><span>'</span><span>utf8</span><span>'</span><span>;</span>
3. 建立后台的数据模型
<span>php<br></span><span>defined</span>('IN_PHPCMS') or <span>exit</span>('No permiss resources.'<span>); pc_base</span>::load_sys_class('model', '', 0<span>); </span><span>class</span> link_model <span>extends</span><span> model { </span><span>function</span><span> __construct() { </span><span>$this</span>->db_config = pc_base::load_config('database'<span>); </span><span>$htis</span>->db_setting = 'default'<span>; </span><span>$this</span>->table_name = 'link'<span>; parent</span>::<span>__construct(); } } </span><span>/*</span><span>* * 几点注意: * 1. PC的数据模型基本是鸡肋,只是指定了数据库设置和对应的表名,非彻底的MVC,直接复制一份修改即可。 * 2. 此模型一般在控制器构造方法调用。<br> </span><span>*/</span>
4. 建立后台控制器:
<span>php </span><span>/*</span><span>* * 后台友情链接,完整CURD </span><span>*/</span> <span>defined</span>('IN_PHPCMS') or <span>exit</span>('No permission resources.'<span>); pc_base</span>::load_app_class('admin', 'admin', 0<span>); </span><span>class</span> link <span>extends</span><span> admin { </span><span>private</span> <span>$db</span>, <span>$admin_db</span><span>; </span><span>public</span> <span>$siteid</span><span>; </span><span>function</span><span> __construct() { parent</span>::<span>__construct(); </span><span>$this</span>->M = new_html_special_chars(getcache('link', 'commons'<span>)); </span><span>$this</span>->db = pc_base::load_model('link_model'<span>); </span><span>$this</span>->db2 = pc_base::load_model('type_model'<span>); } </span><span>/*</span><span>* * 友情链接列表 </span><span>*/</span> <span>public</span> <span>function</span><span> init() { </span><span>if</span>(<span>$_GET</span>['typeid'] != ''<span>) { </span><span>$where</span> = <span>array</span>('typeid'=><span>intval</span>(<span>$_GET</span>['typeid']), 'siteid'=><span>$this</span>-><span>get_siteid()); } </span><span>else</span><span> { </span><span>$where</span> = <span>array</span>('siteid'=><span>$this</span>-><span>get_siteid()); } </span><span>$page</span> = (<span>isset</span>(<span>$_GET</span>['page']) && <span>intval</span>(<span>$_GET</span>['page'])) ? <span>intval</span>(<span>$_GET</span>['page']) : 1<span>; </span><span>$infos</span> = <span>$this</span>->db->listinfo(<span>$where</span>, <span>$order</span> = 'listorder DESC, linkid DESC', <span>$page</span>, <span>$page</span> = '9'<span>); </span><span>$pages</span> = <span>$this</span>->db-><span>pages; </span><span>$types</span> = <span>$this</span>->db2->listinfo(<span>array</span>('module'=>ROUTE_M, 'siteid'=><span>$this</span>->get_siteid()), <span>$order</span> = 'typeid DESC'<span>); </span><span>$types</span> = new_html_special_chars(<span>$types</span><span>); </span><span>$type_arr</span> = <span>array</span><span>(); </span><span>foreach</span>(<span>$types</span> <span>as</span> <span>$typeid</span>=><span>$type</span><span>) { </span><span>$type_arr</span>[<span>$type</span>['typeid']] = <span>$type</span>['name'<span>]; } </span><span>$big_menu</span> = <span>array</span>('javascript:window.top.art.dialog({id:\'add\',iframe:\'?m=link&c=link&a=add\', title:\''.L('link_add').'\', width:\'700\', height:\'450\'}, function(){var d = window.top.art.dialog({id:\'add\'}).data.iframe;var form = d.document.getElementById(\'dosubmit\');form.click();return false;}, function(){window.top.art.dialog({id:\'add\'}).close()});void(0);', L('link_add'<span>)); </span><span>include</span> <span>$this</span>->admin_tpl('link_list'<span>); } </span><span>/</span><span>* 判断标题重复和验证 </span><span>*/</span> <span>/</span><span>* 添加分类时,验证分类名是否已存在 </span><span>*/</span> <span>/*</span><span>* * 添加友情链接 </span><span>*/</span> <span>public</span> <span>function</span><span> add() { </span><span>if</span>(<span>isset</span>(<span>$_POST</span>['dosubmit'<span>])) { </span><span>$_POST</span>['link']['addtime'] =<span> SYS_TIME; </span><span>$_POST</span>['link']['siteid'] = <span>$this</span>-><span>get_siteid(); </span><span>if</span>(<span>empty</span>(<span>$_POST</span>['link']['name'<span>])) { showmessage(L(</span>'sitename_noempey'),<span> HTTP_REFERER); } </span><span>else</span><span> { </span><span>$_POST</span>['link']['name'] = safe_replace(<span>$_POST</span>['link']['name'<span>]); } </span><span>if</span>(<span>$_POST</span>['link']['logo'<span>]) { </span><span>$_POST</span>['link']['logo'] = safe_replace(<span>$_POST</span>['link']['logo'<span>]); } </span><span>$data</span> = new_addslashes(<span>$_POST</span>['link'<span>]); </span><span>$linkid</span> = <span>$this</span>->db->insert(<span>$data</span>, <span>true</span><span>); </span><span>if</span>( ! <span>$linked</span><span>) { </span><span>return</span> <span>false</span><span>; } </span><span>$siteid</span> = <span>$this</span>-><span>get_siteid(); </span><span>//</span><span>更新附件状态</span> <span>if</span>(pc_base::load_config('system', 'attachment_stat') & <span>$_POST</span>['link']['logo'<span>]) { </span><span>$this</span>->attachment_db = pc_base::load_model('attachment_model'<span>); </span><span>$this</span>->attachment_db->api_update(<span>$_POST</span>['link']['logo'], 'link-' . <span>$linkid</span>, 1<span>); } showmessage(L(</span>'operation_success'), HTTP_REFERER, '', 'add'<span>); } </span><span>else</span><span> { </span><span>$show_validator</span> = <span>$show_scroll</span> = <span>$show_header</span> = <span>true</span><span>; pc_base</span>::load_sys_class('form', '', 0<span>); </span><span>$siteid</span> = <span>$this</span>-><span>get_siteid(); </span><span>$types</span> = <span>$this</span>->db2->get_types(<span>$siteid</span><span>); </span><span>include</span> <span>$this</span>->admin_tpl('link_add'<span>); } } </span><span>/*</span><span> 异步更新排序 </span><span>*/</span> <span>/*</span><span> 手动更新排序 </span><span>*/</span> <span>/*</span><span> 添加友情链接分类 </span><span>*/</span> <span>/*</span><span> 删除分类 </span><span>*/</span> <span>/*</span><span> 分类管理 </span><span>*/</span> <span>/*</span><span>* * 修改友情链接分类 </span><span>*/</span> <span>public</span> <span>function</span><span> edit_type() { </span><span>if</span>(<span>isset</span>(<span>$_POST</span>['dosubmit'<span>])) { </span><span>$typeid</span> = <span>intval</span>(<span>$_GET</span>['typeid'<span>]); </span><span>if</span>(<span>$typeid</span> return <span>false</span><span>; </span><span>if</span>( ! <span>is_array</span>(<span>$_POST</span>['type']) || <span>empty</span>(<span>$_POST</span>['type'])) <span>return</span> <span>false</span><span>; </span><span>if</span>((!<span>$_POST</span>['type']['name']) || <span>empty</span>(<span>$_POST</span>['type']['name'])) <span>return</span> <span>false</span><span>; </span><span>$this</span>->db2->update(<span>$_POST</span>['type'], <span>array</span>('typeid'=><span>$typeid</span><span>)); showmessage(L(</span>'operation_success'),'?m=link&c=link&a=list_type','', 'edit'<span>); } </span><span>else</span><span> { </span><span>$show_validator</span> = <span>$show_scroll</span> = <span>$show_header</span> = <span>true</span><span>; </span><span>//</span><span>查询分类内容</span> <span>$info</span> = <span>$this</span>->db2->get_one(<span>array</span>('typeid'=><span>$_GET</span>['typeid'<span>])); </span><span>if</span>( ! <span>$info</span><span>) { showmessage(L(</span>'linktype_exit'<span>)); </span><span>extract</span>(<span>$info</span><span>); </span><span>include</span> <span>$this</span>->admin_tpl('link_type_edit'<span>); } } } </span><span>/*</span><span>* * 删除友情链接 </span><span>*/</span> <span>public</span> <span>function</span><span> delete() { </span><span>if</span>( ! <span>isset</span>(<span>$_GET</span>['linkid']) || (<span>empty</span>(<span>$_GET</span>['linkid']) && ! <span>isset</span>(<span>$_POST</span>['linkid'])) || <span>empty</span>(<span>$_POST</span>['linkid'<span>])) { showmessage(L(</span>'illegal_parameters'),<span> HTTP_REFERER); } </span><span>else</span><span> { </span><span>if</span>(<span>is_array</span>(<span>$_POST</span>['linkid'<span>])) { </span><span>foreach</span>(<span>$_POST</span>['linkid'] <span>as</span> <span>$linkid_arr</span><span>) { </span><span>//</span><span>批量删除友情链接</span> <span>$this</span>->db->delete(<span>array</span>('linkid'=><span>$linkid_arr</span><span>)); </span><span>//</span><span>更新附件状态</span> <span>if</span>(pc_base::load_config('system', 'attachment_stat'<span>)) { </span><span>$this</span>->attachment_db = pc_base::load_model('attachment_model'<span>); </span><span>$this</span>->attachment_db->api_delete('link - '. <span>$linkid_arr</span><span>); } } showmessage(L(</span>'operation_success', '?m=link&c=link'<span>)); } </span><span>else</span><span> { </span><span>$linkid</span> = <span>intval</span>(<span>$_GET</span>['linkid'<span>]); </span><span>if</span>(<span>$linkid</span> ) { <span>return</span> <span>false</span><span>; } </span><span>//</span><span>删除友情链接</span> <span>$result</span> = <span>$this</span>->db->delete(<span>array</span>('linkid'=><span>$linkid</span><span>)); </span><span>//</span><span>更新附件状态if(pc_base::load_config('system','attachment_stat')) {</span> <span>$this</span>->attachment_db = pc_base::load_model('attachment_model'<span>); </span><span>$this</span>->attachment_db->api_delete('link-'.<span>$linkid</span><span>); } </span><span>if</span>(<span>$result</span><span>){ showmessage(L(</span>'operation_success'),'?m=link&c=link'<span>); }</span><span>else</span><span> { showmessage(L(</span>"operation_failure"),'?m=link&c=link'<span>); } } showmessage(L(</span>'operation_success'),<span> HTTP_REFERER); } } } </span><span>/*</span><span>* * 几点注意: * 1. 作为一款产品,你可以感受到它程序的严谨性,照着做。 * 2. 操作数据类和其它系统类均在 libs/classes/ 中,数据模型基类model.class.php通过数据库工厂类作为抽象层调用操作数据库的方法。 * 3. 查询所有为listinfo, 单条信息为get_one, 增加为insert, 修改为update。 * 4. 提示消息为系统公共函数showmessage(),在 libs/functions/global.func.php 中。 * 5. L()方法为语言处理函数,将读入语言包,根据后台配置显示英文/中文, 同样是系统公共函数,<br> * 6. 加载后台模板 include $this->admin_tpl(""); 这是admin模块下admin.class.php类的方法<br> * <www.chenwei.ws> </www.chenwei.ws></span><span>*/</span>
5. 建立后台模板文件
后台模板文件都在 modules/link/templates 下,文件名统一以“ .tpl.php”结尾
<span>/*</span><span>* * 后台模板局部 </span><span>*/</span> <span>php </span><span>defined</span>('IN_ADMIN') or <span>exit</span>('No Permission resources.'<span>); </span><span>$show_dialog</span> = 1<span>; </span><span>include</span> <span>$this</span>->admin_tpl('header', 'admin'<span>); </span>?>
class="explain-col">
echo L('all_linktype')?>: echo L('all')?>
默认分类
php
if(is_array($type_arr)){
foreach($type_arr as $typeid => $type){
?>echo $type;?>
|
PHPCMS的模块化设计非常人性化,更多有趣的地方等待大伙儿去发现,等待:[PC]PHPCMS二次开发指南(下)
Link:http://www.cnblogs.com/farwish/p/4249318.html
@黑眼诗人
以上就介绍了[PC]PHPCMS二次开发指南(上),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Ramai pengguna akan memilih jenama Huawei apabila memilih jam tangan pintar Antaranya, Huawei GT3pro dan GT4 adalah pilihan yang sangat popular. Apakah perbezaan antara Huawei GT3pro dan GT4? 1. Rupa GT4: 46mm dan 41mm, bahan cermin kaca + badan keluli tahan karat + cangkang belakang gentian resolusi tinggi. GT3pro: 46.6mm dan 42.9mm, bahannya ialah kaca nilam + badan titanium/badan seramik + cangkerang belakang seramik 2. GT4 yang sihat: Menggunakan algoritma Huawei Truseen5.5+ terkini, hasilnya akan lebih tepat. GT3pro: Penambahan elektrokardiogram ECG dan saluran darah serta keselamatan

Mengapa Alat Snipping Tidak Berfungsi pada Windows 11 Memahami punca masalah boleh membantu mencari penyelesaian yang betul. Berikut ialah sebab utama Alat Snipping mungkin tidak berfungsi dengan betul: Focus Assistant dihidupkan: Ini menghalang Snipping Tool daripada dibuka. Aplikasi rosak: Jika alat snipping ranap semasa pelancaran, ia mungkin rosak. Pemacu grafik lapuk: Pemacu yang tidak serasi mungkin mengganggu alat snipping. Gangguan daripada aplikasi lain: Aplikasi lain yang sedang berjalan mungkin bercanggah dengan Alat Snipping. Sijil telah tamat tempoh: Ralat semasa proses naik taraf boleh menyebabkan penyelesaian mudah ini sesuai untuk kebanyakan pengguna dan tidak memerlukan sebarang pengetahuan teknikal khusus. 1. Kemas kini apl Windows dan Microsoft Store

Untuk pembangun PHP, menggunakan POST untuk melompat ke halaman dengan parameter adalah kemahiran asas. POST ialah kaedah menghantar data dalam HTTP Ia boleh menghantar data ke pelayan melalui permintaan HTTP Lompat halaman memproses dan melompat halaman pada bahagian pelayan. Dalam pembangunan sebenar, kita sering perlu menggunakan POST dengan parameter untuk melompat ke halaman untuk mencapai tujuan fungsi tertentu.

Python mensimulasikan penyemak imbas menghantar permintaan kiriman importrequests format request.postrequest.post(url,data,json,kwargs)#post request format request.get(url,params,kwargs)#Berbanding dengan permintaan get, menghantar parameter permintaan pos dibahagikan kepada parameter data forms ( x-www-form-urlencoded) json (application/json) menyokong format kamus dan format rentetan Format kamus menggunakan kaedah json.dumps() untuk menukar data kepada rentetan format json yang sah

PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas yang boleh digunakan untuk mencipta aplikasi web yang interaktif dan dinamik. Apabila membangunkan aplikasi PHP, kami biasanya perlu menyerahkan data input pengguna ke pelayan untuk diproses melalui borang. Walau bagaimanapun, kadangkala kita perlu menentukan sama ada data borang telah diserahkan dalam PHP Artikel ini akan memperkenalkan cara membuat penentuan sedemikian.

1. Java calls post interface 1. Gunakan URLConnection atau HttpURLConnection yang disertakan dengan java Tidak perlu memuat turun pakej jar lain Jika kod respons antara muka diubah oleh pelayan, mesej kembali tidak boleh diterima hanya diterima apabila kod respons adalah betul untuk mengembalikan publicstaticStringsendPost(Stringurl,Stringparam){OutputStreamWriterout=null;BufferedReaderin=null;StringBuilderresult=newSt.

实现如下:pelayan{listen80;listen443ssl;server_namenirvana.test-a.gogen;ssl_certificate/etc/nginx/ssl/nirvana.test-a.gogen.crt;ssl_certificate_key/etc/nginx.s.gentestl .key;proxy_connect_timeout600;proxy_read_timeout600;proxy_send_timeout600;c

PHP ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan laman web, dan lompat halaman dan membawa data POST adalah keperluan biasa dalam pembangunan laman web. Artikel ini akan memperkenalkan cara melaksanakan lompat halaman PHP dan membawa data POST, termasuk contoh kod khusus. Dalam PHP, lompatan halaman biasanya dilaksanakan melalui fungsi pengepala. Jika anda perlu membawa data POST semasa proses lompatan, anda boleh melakukannya melalui langkah berikut: Pertama, buat halaman yang mengandungi borang, di mana pengguna mengisi maklumat dan mengklik butang hantar. Acti dalam borang
