打開項目(若是有nbproject)和新建項目:遇到一次很奇葩的事情,NetBeans說」項目文件夾已經是 NetBeans 項目文件夾 (可能僅在內存中)「,這個時候到本身的工做目錄下,看見一個nbproject的東東,把它刪掉,再從新導入便可。php
Localhost打不開的狀況:html
http.conf這個位置不要動前端
第一天:模擬網站萊茵春天【http://www.daf-rs.com】套用靜態頁面;
次日:作項目首先想到的是:百度搜索相關文檔,首先是官方幫助文檔;
離線版PHPCMS V9用戶手冊;
在線手冊:http://v9.help.phpcms.cn/;
梳理代碼:
若是是單入口程序,就從單入口看起,先簡單看下流程。如怎麼樣根據瀏覽器請求返回不一樣的響應。
通常來講,單入口程序是MVC框架,入手簡單,先不看具體的框架代碼。
若是是老的單入口項目,如Discuz,是面向過程式的過程,很顯然,不是MVC框架,這種狀況下,通常是根據GET請求的ACTION(act,do,method)等等來完成include不一樣的頁面,在另外頁面中完成業務邏輯部分。
不是單入口程序。一個頁面就是一個文件,根據網址找到咱們的PHP頁面,查看代碼功能和業務邏輯。
PHPCMS V9 流程:
pc_base::creat_app(); 調用基本的PHPCMS核心組件,建立應用;
測試時候,不能僅僅打開網址或者虛擬主機,必須加上index.php,不然你看到的是index.html頁面的內容。
Include並實例化application.class.php。獲取路由參數,並賦值到常量ROUTE_M,ROUTE_C,ROUTE_A。
與通常的MVC框架原理同樣,首先獲取Module,Controller,Action,而後實例化Controller,調用Action方法。能夠經過load_controller方法的$filepath變量,確認Controller路徑。
Call_user_func函數解析。
因此首頁默認調用的是modules/content/index.php頁面的Index類的init方法。
其餘的請求,也是相似的調試方法。
模板路徑:
Controller的action方法最後,經過include template(); 來調用並顯示咱們的模板。
模板顯示數據:
首先,後臺的欄目,文章都須要先添加。從需求中分析,哪一個做爲欄目,哪一個是文章,哪一個是單頁面,都須要心中有數。
登陸後臺,添加欄目和文章。
若是後臺不能登陸,確保CSS,JS,IMAGE等資源路徑是正確的。首要問題是域名問題,確保資源路徑的域名是咱們的運行環境的域名。這個問題,均可以經過修改caches/coinfigs/下的配置文件來完成。
後臺->內容->管理欄目->添加欄目->添加子欄目。
在PHPCMS中,多個【欄目列表list】會組成一個【欄目首頁category】。
新建欄目時,若是每一個欄目的模板都不統一,建議每一個欄目選擇一個模板。從【模板設置】標籤中能夠選擇。
若是沒有子欄目,實際起做用的模板是【欄目列表頁模板】。
若是有子欄目,實際起做用的模板是【欄目首頁模板】。
欄目首頁模板必須以category開頭,才能夠被列出來。
欄目列表頁模板必須以list開頭,才能被列出來。
內容頁模板必須以show開頭,才能被列出來。
列表頁list讀取數據:
首先要參考list.html模板。
找到合適的代碼,或者參考PHPCMS文檔【標籤使用->功能模塊->內容模塊->2.內容列表】。把參考代碼放入新模板的合適位置。
{pc:content action="lists" catid="$catid" num="25" order="id DESC" page="$page"}
<ul class="nws_list">
{loop $data $r}
<li class="bg">
<span class="date">{date('Y-m-d',$r[inputtime])}</span>
<a href="{$r[url]}" class="lk_a">{$r[title]}</a>
</li>
{/loop}
</ul>
<div id="pages" class="text-c">{$pages}</div>
Pc標籤作爲數據的獲取的方式。PC標籤必須以{pc}開頭,並以{/pc}結尾的代碼片斷。
action="list" 這個形式所表明的是參數,其餘catid,order,page也均爲參樹;num=」25」 數據調用數量,page是當前的頁數。
$pages變量爲分頁導航的html片斷。能夠放入div標籤中更改樣式。jquery
後臺添加文章。內容->管理內容->點擊欄目列表。數據庫
僞靜態:
開啓僞靜態:
Apache須要開啓rewrite_module;
虛擬主機或者網站目錄配置要開啓AllowOverride All
根目錄下要有.htaccess文件。
.htaccess文件內容例子:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On數組
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f瀏覽器
RewriteRule ^list-(\d+)-(\d+)?\.html$
index.php?m=content&c=index&a=lists&catid=$1&page=$2 [L]
RewriteRule ^show-(\d+)-(\d+)(-(\d+))?\.html$ index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$4 [L]
</IfModule>
內容->管理欄目->某一個欄目->修改->生成HTML設置->欄目頁URL規則+內容頁URL規則->選擇.html結尾的URL格式。
欄目URL規則須要一個個修改。
內容的URL不須要一個個更改。內容->發佈管理->批量更新URL。網絡
PHPCMS網站上線,遷移。
修改caches/configs/目錄下的幾個文件。如system.php,database.php。
修改system.php的各項配置中的域名改成線上的域名。也能夠全文替換。
第三天:把header,footer等公共頁面提取出來。在其餘頁面引用的時候,用{template "content","footer"} 來實現,template以後要有空格,content是模塊的名字,footer是去除.html擴展以後的文件名稱。
經過正則替換變成這樣:
路徑如何修改:
{APP_PATH}statics/
能夠經過f12查看網絡,404表示沒加載,把404的改了就能夠了。
全文搜索:在文件加上點擊右鍵,點擊查找
在category_或者list_頁面調取子欄目。示例代碼:
<ul class="ulnav">
{pc:content action="category" catid="$catid" num="25" siteid="$siteid" order="listorder ASC"}
{loop $data $r}
<li class="lk_li">
<h3 class="h3Tit">
<a href="{$r[url]}" name="top2" class="lk_a cur">{$r[catname]}</a></h3>
<ol class="olnav olnavOpen"></ol>
</li>
{/loop}
</ul>
{/pc} app
$catid是獲取的$_GET[‘catid’],num是讀取數據數量。
若是要獲取子欄目,用subcat來操做。示例代碼:框架
<?php $subcat = subcat($r['catid']);?>
{if !empty($subcat)}
<ol class="olnav olnavOpen">
{loop $subcat $sr}
<li>
<a href="{$sr[url]}" class="lk_a cur">{$sr[catname]}</a></li>
<li>
{/loop}
</ol>
{/if}
模板裏面能夠直接寫PHP原生代碼,
是經過正則來轉換的:
也能夠寫模板代碼,如:
{php $subcat = subcat($r['catid']);}
有時候,欄目調用的單獨的HTML頁面,並且又須要後臺更新數據。因此,咱們想到能把欄目的描述更改成富文本編輯代碼。方法:
文件路徑:phpcms/modules/admin/templates/category_edit.tpl.php
修改代碼:
<textarea name="info[description]" maxlength="255" style="width:300px;height:60px;"><?php echo $description;?></textarea>
加入ID:
<textarea id="description" name="info[description]" maxlength="255" style="width:300px;height:60px;"><?php echo $description;?></textarea>
</teaxearea>以後加入富文本編輯器功能的代碼:
<?php echo form::editor("description"); ?>
在咱們的前端頁面中,就能夠直接調用欄目的描述信息了。
前端頁面的欄目與子欄目導航:
子菜單隱藏和顯示:
欄目須要鏈接可用;同時右側應該有按鈕,點擊以後,能顯示和隱藏子菜單列表;
JS事件的捕獲和觸發:
事件捕獲階段:事件從最上一級標籤開始往下查找,直到捕獲到事件目標(target)。
事件冒泡階段:事件從事件目標(target)開始,往上冒泡直到頁面的最上一級標籤。
阻止冒泡有兩種策略:
用event.stopPropagation()。
$(「a.blue」).click(function(event){
event.stopPropagation();
//繼續其餘代碼
});
用return false;阻止。
$("li.lk_li").click(function(){
var obj = $(this).find("ol");
$(obj).toggleClass("olnavOpen");
return false;
});
經過加減號按鍵實現子欄目的展開與關閉:
$(".nav-plus").click(function(){
//向後查找元素
var obj = $(this).next(".olnav");
if (obj.length >= 1) {
//原來的內容
var p_old = $(this).text();
//新的內容,加減號
var p_new = (p_old == '+') ? '-' : "+";
$(this).text(p_new);
$(obj).toggleClass("olnavOpen");
return false;
}
});
jQuery的next是向後查找指定特徵的對象。
toggleClass交替變化class樣式。
第四天:欄目修改模板,包括category,list。
第五天:欄目修改模板。
拋出問題:
無限分類:
數據庫設計。
PHP遞歸代碼實現。
HTML呈現,包含【selecet】形式和【div】和【ul>li】等形式。
如下是實例:
<?php
include "tree.class.php";
$cates = array(
1 => array('id' => '1', 'parentid' => 0, 'name' => '一級欄目一'),
2 => array('id' => '2', 'parentid' => 0, 'name' => '一級欄目二'),
3 => array('id' => '3', 'parentid' => 1, 'name' => '二級欄目一'),
4 => array('id' => '4', 'parentid' => 1, 'name' => '二級欄目二'),
5 => array('id' => '5', 'parentid' => 2, 'name' => '二級欄目三'),
6 => array('id' => '6', 'parentid' => 3, 'name' => '三級欄目一'),
7 => array('id' => '7', 'parentid' => 3, 'name' => '三級欄目二')
);
$TreeObj = new tree();
$TreeObj->init($cates);
$ttpl = "<option value=\$id \$selected>\$spacer\$name</option>";
$treeStr = $TreeObj->get_tree(0, $ttpl);
?>
<select name="category">
<?php echo $treeStr; ?>
</select>
模擬請求,不用curl,用fsockopen封裝的http類。
擴展。
木馬查殺關鍵字
eval。PHP,JS均有。
exec,system。
木馬查殺就是找關鍵字Eval(); exec();
<?php
//木馬查殺的時候只須要查找eval()函數就能夠了,eval()函數謹慎用。會把字符串都解析了
$str = '$b = 10;';
eval($str);
echo $b;
?>
這是向系統中添加用戶:用戶名爲foo
這是刪除系統中的用戶
在瀏覽器中輸入http://localhost/eval.php?s=dir 可輸出dir目錄
還有一個程序叫phpdama.php
省市縣聯動:
每次從下拉框選擇時,須要動態獲取數據。
獲取的數據須要賦值到select的option。
在修改地址時,須要選中效果。
JS+AJAX請求。
技術:
Select增長option。
function addOption(selectid, text, value){
var obj=document.getElementById(selectid);
obj.options.add(new Option(text,value));
}
動態建立select。
function createSelect(){
var mySelect = document.createElement("select");
mySelect.id = "mySelect";
document.body.appendChild(mySelect);
}
http://www.jq22.com/demo/jquery-three-linkage-141202215250/
拋出問題:Extract(); 把數組轉換成以鍵名爲變量名的變量組,能夠直接echo 輸出變量
如下是添加+號,點擊出現下拉框
控制檯能夠直接寫代碼看效果!!!jQuery是很厲害的
把open去掉
當有子欄目時出現+號:
訪問 路徑是域名 調pages師資力量德國大學申請企業德語培訓導航欄$n的問題<?php $ppid = $CATEGORYS[$parentid]['parentid']; ?>模板風格: