|
|
|
อยากรู้หลักการออกแบบโปรแกรมของ wordpress จะเอามาประยุกต์ใช้ค่ะ |
|
|
|
|
|
|
|
ไม่แน่ใจคับ คิดว่า อาจเป็นไปได้ทั้งสองแบบ (เพราะไม่เคยแกะ)
ต้องลองเอาโค้ด ฟังชั่น ตัวอย่างมาดูครับ
(แยก) คือเรียกเท่าที่จำเป็น เรียก ในเวลาที่่ต้องการ เพราะโมดุล คงจะใช้สะดวก โดยไม่ต้องยุ่งกับ sql มาก
ถ้าเรียกมาแล้ว ก็เก็บไว้ใน บัฟเฟอร์ เวลาเรียกอีกที ถ้าเป็นข้อมูลเดิมก็ใช้
|
|
|
|
|
Date :
2010-11-10 14:32:28 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ต้องแกะตามก้ได้ค่ะ
เขียนใหม่เลยก็ได้ อยากรู้ว่าต้องเขียนออกมารูปแบบใหนค่ะ
|
|
|
|
|
Date :
2010-11-10 14:49:46 |
By :
Avrill |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมไม่แน่ใจว่าคุณหมายถึงอะไร
ตรงนี้หรือป่าว
while (have_posts()): the_post();?>
ถ้ายังมี post เหลือ ให้แสดง post
แสดงว่า มีการเก็บค่า id ปัจจุบันไว้ หรือไม่ก็ ใช้ array_pop() จาก global variable
Ex.
$arr = array('abc', 'bcd', 'cde');
function have_posts()
{
global $arr;
return count($arr);
}
function the_posts()
{
global $arr;
return array_pop($arr);
}
อืม ใช้ array_shift() น่าจะถูกกว่านะ
|
ประวัติการแก้ไข 2010-11-10 15:08:26
|
|
|
|
Date :
2010-11-10 14:57:16 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WordPress เป็นอะไรที่สุดสอดมาก ๆ ครับ เห็นโครงสร้างการเขียนแล้วมันง่ายต่อการปรับปรุงหรือแก้ไขมาก ๆ ครับ
|
|
|
|
|
Date :
2010-11-10 15:08:16 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่วิน ผมเห็นเค้าบ่นกันว่าโค้ด wp มันโฮะสุด กว่า drupal กะ joomla
อันนี้ ไม่แน่ใจ ถ้าโฮะ แต่เข้าใจคงจะกลายเป็นง่ายหละมัง
|
|
|
|
|
Date :
2010-11-10 15:10:12 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ๋อ แสดงว่ายังไม่เข้าใจคำถาม
เอาอย่างงี้นะ ไม่ต้องสนใจโค๊ดของ wordpress เลยก็ได้ค่ะ แค่เอามายกตัวอย่างให้ดูเฉยๆ
ถ้าแบบเดิมๆที่เราเขียนอยู่จะเขียนแบบนี้ค่ะ
Code (PHP)
<?PHP
class report {
public $group_id,$group_sid;
function __construct(){
$this->group_id = @$_REQUEST['gid'];
$this->group_sid = @$_REQUEST['gsid'];
}
public function get_group_name($group_id){
$sql = "select * from tb_group where group_sub_status ='1' and group_id='" .$this->group_id. "' ";
$q= mysql_query($sql);
while ($r= mysql_fetch_array($q)){
list($gsid, $gid ,$gsname ,$gs_status ,$g_sub_date)=$r;
echo "<table width=\"99%\" height=\"40\" border=\"1\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\">";
echo"<tr>
<td valign=\"top\" bgcolor=\"#999999\" id=\"borderpjt\">
<strong><a href=\"index.php?name=report&gsid=$gsid&gid=$gid\">$gsname</a></strong>
</td>
</tr>";
echo "</table>";
}
}
}
จะเห็นได้ว่าใส่ตารางกำหนดรูปแบบให้มันเรียบร้อย พอเรียกใช้ที่ใหนมันก็ออกมาตามรูปแบบที่สร้างไว้
ซึ่่งมันไม่ยืดหยุ่นในเรื่องของดีไซน์เลยค่ะ จริงอยู่มันอาจจะเรียกใช้ได้หลายๆหน้า เวลาแก้ไขก็แก้ที่ function ทีเดียว
แต่ที่อยากได้คือ สามารถแก้ไขรูปแบบได้เองภายหลังไม่ว่าจะเรียกใช้กี่ครั้ง เปลี่ยนรูปแบบกี่ครั้งก็ได้ พอเข้าใจหรือยังเอ่ย
เหมือนกับโค๊ดของ wordpress ข้างบนค่ะ
ถ้าเอาพวกนี้ไปใช้ เราจะจัดรุปแบบให้มันยังไงก็ได้ จับมันยัดใส่ table ก็ได้ ใส่ div หรือ li ก็ได้ ประมาณนี้ค่ะ
Code (PHP)
<?php the_permalink()?>
<?php the_title(); ?>
<?php the_content('');?>
|
|
|
|
|
Date :
2010-11-10 15:35:34 |
By :
Avrill |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็แค่เก็บไว้เป็นข้อมูลครับ
ไว้ใน class attribute ก็ได้ครับ
Code (PHP)
for (Somclass::get_members() as $member)
{
echo '<a href="#" rel="'.$member['id'].'">'.$member['name'].'</a>', "\n";
}
แก้ไขนิดนะคับ
จากที่คุณบอกว่า "ยัดใส่" คิดว่าหมายถึงน่าจะ ไม่ใช่ข้อมูลดิบ มันก็คงมี html ติดมาด้วย
ดังนั้น ที่ว่ายัดใส่ ก็คิดว่า เขาแค่ออกแบบให้มันง่ายโดยทั่วๆไป เช่นถ้าเป็น รายชื่อ user ก็แค่แสดง <ul><li></li><ul>
ส่วนเรื่องการจัดการแสดงผลนั้น ขึ้นอยู่กับการเลือกใช้ css ที่อาจจะขึ้นอยู่กับ template
และอีกอย่าง มีหลาย cms ที่หน้าตาคล้ายๆ กัน(บางจุด) ถึงแม้จะมี template มากมาย แต่บางทีคนทำ template เหล่านั้นไม่อาจเสียเวลาไป override มันก็ได้ครับ เพราะมันติด html มาด้วย ก็แค่ใช้ css
|
ประวัติการแก้ไข 2010-11-10 15:51:08 2010-11-10 15:53:52
|
|
|
|
Date :
2010-11-10 15:43:37 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือเมื่อหลายร้อยปีก่อน (ว่าไป) ผมได้หัดเขียน cms ชื่อ digco แต่เกิดความขี้เกียจเลยหยุดไป คือเอา WP มาจิ้ม ๆ ใช้กับตัวเอง ซึ่งผมจะเขียนแบบเป็น 2 อย่างคือ Class กับ Function จะได้ดังนี้นะครับ
<?php
if(!defined("DIGCO_VERSION")) exit('No access allowed');
// Class App
class App
{
function __construct()
{
//
}
function connectdb($host,$user,$pw,$db)
{
$conn = @mysql_connect($host,$user,$pw);
if($conn)
{
$rsdb=$this->selectdb($db);
if(!$rsdb)
{
echo $this->_err(mysql_error());
}
}
else
{
echo $this->_err(mysql_error());
}
}
function selectdb($db)
{
$sldb=mysql_select_db($db);
if($sldb)
{
return true;
}
else
{
return false;
}
}
function _err($str)
{
$str="<p style='color:red;'>$str</p>";
return $str;
}
function query($sql)
{
mysql_query("SET NAMES utf8");
$rs=mysql_query($sql);
if($rs)
{
return $rs;
}
}
function gettheme()
{
$rs=$this->query("Select set_theme From tb_setting");
if(mysql_num_rows($rs)==0)
{
return false;
}
else
{
$f=mysql_fetch_array($rs);
return $f['set_theme'];
}
}
function perpage()
{
$rs=$this->query("Select set_posts_per_page as pages From tb_setting");
if(mysql_num_rows($rs)==0)
{
$page=1;
}
else
{
$f=mysql_fetch_array($rs);
if($f['pages']=="" || is_numeric($f['pages'])==false)
{
$page=1;
}
else
{
$page=$f['pages'];
}
}
return $page;
}
function links($id="",$table="",$title="")
{
$rs=$this->query("Select set_mod_rewrite as re From tb_setting");
if(mysql_num_rows($rs)==0)
{
$re=false;
}
else
{
$f=mysql_fetch_array($rs);
if($f['re']=="y")
{
$re=true;
}
else
{
$re=false;
}
}
$sql = "Select long_url,short_url From ".$table." Where id='".$id."'";
$rslink=$this->query($sql);
if(mysql_num_rows($rslink)==0)
{
return "<a href=\"#\">$title</a>";
}
else
{
$flink=mysql_fetch_array($rslink);
if($re==true)
{
return "<a href=\"".$flink['long_url'].".html\">".$title."</a>";
}
else
{
return "<a href=\"".$flink['short_url']."\">".$title."</a>";
}
}
}
}
?>
ส่วนอันนี้ก้อคือ function
<?php
if(!defined("DIGCO_VERSION")) exit('No access allowed');
// function.inc.php
function nav()
{
global $app;
$rs = $app->query("Select * From tb_pages order by page_id");
$nav="<ul>";
$nav.="<li><a href=\"./\">HOME</a></li>";
while($r=mysql_fetch_array($rs))
{
$nav.="<li><a href=\"index.php?mod=page&id=".$r['page_id']."\">".$r['title']."</a></li>";
}
$nav.="</ul>";
return $nav;
}
function title()
{
global $app;
$rs=$app->query("Select set_title From tb_setting");
if(mysql_num_rows($rs)==0){
return "DIGCO BLOG CMS";
}
else
{
$f=mysql_fetch_array($rs);
return $f['set_title'];
}
}
function description()
{
global $app;
$rs=$app->query("Select set_description From tb_setting");
if(mysql_num_rows($rs)==0){
return "DIGCO BLOG CMS";
}
else
{
$f=mysql_fetch_array($rs);
return $f['set_description'];
}
}
function keywords()
{
global $app;
$rs=$app->query("Select set_keyword From tb_setting");
if(mysql_num_rows($rs)==0){
return "digco,cms,digco thai cms,cms thai,cms ไทย,cms คนไทย,cms สายพันธุ์ไทย";
}
else
{
$f=mysql_fetch_array($rs);
return $f['set_keyword'];
}
}
function base_url()
{
global $app;
$rs=$app->query("Select set_url From tb_setting");
if(mysql_num_rows($rs)==0){
return "http://localhost/digco2";
}
else
{
$f=mysql_fetch_array($rs);
return $f['set_url'];
}
}
function showtheme()
{
global $app;
$theme=$app->gettheme();
if($theme)
{
$gett=$theme;
}
else
{
$gett="default";
}
return require_once('theme/'.$gett.'/index.php');
}
function theme()
{
global $app;
$theme=$app->gettheme();
if($theme)
{
$gett=$theme;
}
else
{
$gett="default";
}
$theme ='theme/'.$gett;
return $theme;
}
function category()
{
global $app;
$str = "<ul>";
$str.="<h3>Category</h3>";
$rs=$app->query("Select * From tb_categories");
if(mysql_num_rows($rs)==0){
$str.="<li>- - - - - - ไม่มีหมวดหมู่ - - - - - -</li>";
}
else
{
while($f=mysql_fetch_array($rs))
{
$str.="<li><a href=\"index.php?mod=category&id=".$f['cat_id']."\">".$f['cat_name']."</a></li>";
}
}
$str.="</ul>";
return $str;
}
function form_search()
{
return '<form method="POST" action="?mod=search"><input type="text" name="txtsrch" value="Search..." /></form>';
}
function tag()
{
global $app;
$types=array();
$rs=$app->query("Select tag From tb_posts");
if(mysql_num_rows($rs)>0)
{
while($ftypes = mysql_fetch_array($rs))
{
$types = array_merge($types, explode(",", $ftypes[0]));
}
$types = arr_unique_comp($types);
echo"<ul>";
echo"<h3>Tags</h3>";
echo"<li>";
for($i=0;$i<count($types);$i++)
{
echo '<a href="index.php?mod=tag&id='.$types[$i].'">'. $types[$i].'</a>';
if($i<count($types)-1) echo ",\n";
}
echo"<li>";
echo"</ul>";
}
}
function arr_unique_comp($a){
$tmparr = array_unique($a);
$i=0;
foreach ($tmparr as $v) {
$newarr[$i] = $v;
$i++;
}
return $newarr;
}
function content()
{
global $app;
$get=isset($_GET['mod'])?$_GET['mod']:'';
$id=isset($_GET['id'])?$_GET['id']:'';
switch($get)
{
case post:
$sql="Select * From tb_posts where id='$id'";
$rs=$app->query($sql);
if(mysql_num_rows($rs)==0)
{
return "ไม่พบข้อมูล";
}
else
{
$f=mysql_fetch_array($rs);
$str="<h2>".$app->links($f['id'],"tb_posts",$f['title'])."</h2>";
$str.=$f['body'];
}
return $str;
break;
case page:
$page = $app->perpage();
$sql="Select * From tb_pages where page_id='$id'";
$rs=$app->query($sql);
if(mysql_num_rows($rs)==0)
{
return "ไม่พบข้อมูล";
}
else
{
while($f=mysql_fetch_array($rs))
{
$str="<h2>".$f['title']."</h2>";
$str.=$f['body'];
}
return $str;
}
break;
case category:
$page = $app->perpage();
$sql="Select * From tb_posts where cat_id='$id' Order by postdate DESC,id DESC";
$rs=$app->query($sql);
if(mysql_num_rows($rs)==0)
{
return "ไม่พบข้อมูล";
}
else
{
while($f=mysql_fetch_array($rs))
{
$str="<h2>".$app->links($f['id'],"tb_posts",$f['title'])."</h2>";
echo $f['shot_body'];
echo "<div style='border-bottom:1px dashed #D1D1D1;width:630px;height:10px;'></div>";
}
}
break;
case tag:
$page = $app->perpage();
$sql="Select * From tb_posts where tag like '%$id%' Order by postdate DESC,id DESC";
$rs=$app->query($sql);
if(mysql_num_rows($rs)==0)
{
return "ไม่พบข้อมูล";
}
else
{
echo"<h2>TAG : $id<?h2>";
while($f=mysql_fetch_array($rs))
{
$str="<h2>".$app->links($f['id'],"tb_posts",$f['title'])."</h2>";
echo $f['shot_body'];
echo "<div style='border-bottom:1px dashed #D1D1D1;width:630px;height:10px;'></div>";
}
}
break;
default:
$page = $app->perpage();
$sql="Select * From tb_posts Order by postdate DESC,id DESC Limit 0,$page";
$rs=$app->query($sql);
if(mysql_num_rows($rs)==0)
{
return "ไม่พบข้อมูล";
}
else
{
while($f=mysql_fetch_array($rs))
{
$str="<h2>".$app->links($f['id'],"tb_posts",$f['title'])."</h2>";
$str.=$f['body'];
}
return $str;
}
break;
}
}
?>
เวลาผมใช้ ผมก็ทำกึ่ง ๆ แบบ WP ครับ จะได้แบบนี้
<?php
if(!defined("DIGCO_VERSION")) exit('No access allowed');
require_once('config.inc.php');
require_once('classapp.inc.php');
require_once('function.inc.php');
$app = new App();
$app->connectdb(DB_HOST,DB_ROOT,DB_PW,DB_NAME);
showtheme();
?>
theme หลัก
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta name="description" content="<?php echo description();?>">
<meta name="keywords" content="<?php echo keywords();?>">
<link rel="stylesheet" type="text/css" href="<?php echo base_url()?>/<?php echo theme();?>/css/style.css" />
<title><?php echo title();?></title>
</head>
<body>
<div id="wrapper">
<div id="header"><h1><a href="./" title="<?php echo title();?>"><img src="<?php echo theme();?>/images/logo.png" alt="<?php echo title();?>" border="0"/></a></h1></div>
<div id="nav"><?php echo nav();?><div id="search"><?php echo form_search();?></div></div>
<div id="banner"></div>
<div id="content">
<div id="main">
<div id="main-head"></div>
<div id="list-content"><?php echo content();?></div>
<div id="main-bt"></div>
</div>
<div id="menu">
<div id="menu-head"> </div>
<div id="m-menu">
<?php echo category();?><br/>
<?php echo tag();?>
</div>
<div id="menu-bt"> </div>
</div>
</div>
</div>
<div id="footer"><p>© 2010 | DIGCO BLOG CMS <span>Power by <a href="http://www.kalamell.com">DIGCO BLOG CMS</a> | Design by <a href="http://www.kalamell.com"/>DIGCO THEME DEFAULT</a></span></p></div>
</body>
</html>
//css
html,body{ margin:0px;padding:0px;}
body{font-family:serif;background:#FFFFFF;text-align:center;}
#wrapper{
width:960px;
margin:0 auto;
padding:0 auto;
background:#FFFFFF;
text-align:left;
}
#header{
margin:0px;
padding:0px;
width:960px;
height:60px;
background:#FFFFFF;
}
#header h1{
margin:0px;
padding:0px;
}
#header h1 a{
color:#FFFFFF;
text-decoration:none;
}
#nav{
margin:0px;
padding:0px;
margin-top:20px;
width:960px;
height:31px;
background:url('../images/nav.png') no-repeat;
position:relative;
}
#nav #search{
width:269px;
height:24px;
right:3px;
top:3px;
position:absolute;
background:url('../images/search.png') no-repeat;
}
#nav #search form{
margin:0px;
padding:0px;
}
#nav #search form input{
margin:3px;
padding:0px;
background:#191010;
border:0px;
width:250px;
height:18px;
color:#FFFFFF;
}
#nav ul{
margin:0px;
margin-left:20px;
padding:0px;
list-style:none;
}
#nav ul li{
display:inline;
font-weight:bold;
}
#nav ul li a{
float:left;
display:block;
color:#FFFFFF;
text-decoration:none;
padding:6px;
}
#nav ul li a:hover{
color:#414141;
background:#FFFFFF;
}
#banner{
width:960px;
padding:0px;
margin:0pt;
height:212px;
background:url('../images/bgbanner.png') no-repeat;
margin-top:10px;
float:left;
}
#content{
width:960px;
background:#FFFFFF;
margin:0px;
padding:0px;
margin-top:10px;
float:left;
}
#content #main{
width:660px;
background:url('../images/main-bg.png') repeat-y;
margin:0px;
padding:0px;
margin-bottom:10px;
float:left;
}
#content #main #list-content{
width:640px;
margin:0px;
padding-left:10px;
float:left;
font-size:14px;
}
#content #main #list-content h2{
margin:0px;
padding:0px;
padding-bottom:10px;
color:darkgreen;
font-size:22px;
}
#content #main #list-content h2 a{
text-decoration:none;
color:darkgreen;
}
#content #main #list-content h2 a:hover{
text-decoration:underline;
color:darkgreen;
}
#content #main #main-head{
width:660px;
height:10px;
margin:0px;
padding:0px;
background:url('../images/main-top.png') no-repeat;
float:left;
}
#content #main #main-bt{
width:660px;
height:10px;
margin:0px;
padding:0px;
background:url('../images/main-bt.png') no-repeat;
float:left;
}
#content #menu{
width:280px;
background:url('../images/menu-bg.png') repeat-y;
float:right;
margin:0px;
padding:0px;
margin-bottom:10px;
margin-left:20px;
}
#content #menu #m-menu{
width:270px;
padding:10px;
margin:0px;
}
#content #menu #m-menu ul{
width:260px;
margin:0px;
padding:0px;
margin-bottom:10px;
list-style:none;
}
#content #menu #m-menu ul h3{
margin:0px;
padding:0px;
padding-bottom:5px;
color:darkgreen;
border-bottom:1px solid #C4C4C4;
}
#content #menu #m-menu ul li{
font-size:13px;
margin:0px;
padding:2px;
}
#content #menu #m-menu ul li a{
text-decoration:none;
}
#content #menu #m-menu ul li a:hover{
text-decoration:none;
padding-left:2px;
}
#content #menu #menu-head{
width:280px;
height:10px;
margin:0px;
padding:0px;
background:url('../images/menu-top.png') no-repeat;
float:right;
}
#content #menu #menu-bt{
width:280px;
height:10px;
margin:0px;
padding:0px;
background:url('../images/menu-bt.png') no-repeat;
float:right;
}
#footer{
clear:both;
margin:0 auto;
padding:0 auto;
width:960px;
height:50px;
margin-bottom:30px;
background:url('../images/footer.png') no-repeat;
text-align:left;
}
#footer p{
padding-top:20px;
padding-left:120px;
color:#FFFFFF;
font-size:11px;
}
#footer p span{
margin-left:370px;
}
#footer p span a{
text-decoration:none;
color:#FFFFFF;
}
#footer p span a:hover{
text-decoration:underline;
color:#C2C2C2;
}
ซึ่งมีให้เลือก Theme ได้ด้วย และ จัดการกับ CSS ของตัวเองได้เลยครับ ลองเอาไปใช้ดู หรือถ้าอยากได้ตัว Demo ที่ไม่ค่อยสมบูรณ์เท่าไหร่ก็ PM มาได้นะครับ
หน้าตามันครับ
|
ประวัติการแก้ไข 2010-11-10 17:19:22
|
|
|
|
Date :
2010-11-10 17:15:41 |
By :
kalamell |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอออกตัวก่อน ผมไม่ได้อวดรู้นะครับ แต่ผมอยากลอง
|
|
|
|
|
Date :
2010-11-10 17:20:38 |
By :
kalamell |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|