Category Archives: PHP

XOOPS 模組內使用 javascript

XOOPS 這個 CMS (Content Management System) 已經風行好久了,最近才有機會仔細的評估一下,感覺上比 MamboJoomla 更有彈性,官方網站也點出未來的方向是朝向 Framework 發展。在專案裡用來作後台應該不錯,每個客戶要求的功能以 module 方式開發,速度快、程式碼也容易維護。

由於現在客戶的胃口都被養大了,要求的功能常常要用到 AJAX,以常見的 Yahoo UI 為例,這是一個 javascript base 的 framework,如何整合在一起的確是花了點時間研究。

首先我們要解決如何崁入我們的 css 及 js 檔,我們以預設的 theme 為例:

在 themes/default/theme.html 裡有以下2行

<!– customized header contents –>
<{$xoops_module_header}>

我們可以利用第2行的 smarty 樣板引擎變數加入我們所需要的 css 及 javascript 檔,以下是個簡單的範例

<?php
require(‘../../mainfile.php’);
require(XOOPS_ROOT_PATH.’/header.php’);


$xoops_module_header=<<<HEADER
<!– datatable includes below –>
<link rel=”stylesheet” type=”text/css” href=”js/yui/build/datatable/assets/skins/sam/datatable.css”>
<script src=”js/yui/build/yahoo-dom-event/yahoo-dom-event.js”></script>
<script src=”js/yui/build/element/element-beta-min.js”></script>
<script src=”js/yui/build/datasource/datasource-beta-min.js”></script>
<script src=”js/yui/build/datatable/datatable-beta-min.js”></script>
<!– loading panel includes below –>
<link rel=”stylesheet” type=”text/css” href=”js/yui/build/container/assets/container.css”>
<script src=”js/yui/build/utilities/utilities.js”></script>
<script src=”js/yui/build/container/container.js”></script>
<!– connection manager includes below –>
<script src=”js/yui/build/yahoo/yahoo-min.js”></script>
<script src=”js/yui/build/event/event-min.js”></script>
<script src=”js/yui/build/connection/connection-min.js”></script>
<!— module javascript –>
<script src=”js/module.js”></script>
HEADER;


$xoopsTpl->assign(‘xoops_module_header’,$xoops_module_header);

$html=<<<HTML
<script language=”javascript”>
showDownloadCountHTML();
</script>
<h2>AJAX HTML output</h2>
<div id=”DownloadTableHTML”></div>
<h2>AJAX YUI datatable</h2>
<div id=”DownloadTableYUI”></div>
HTML;

echo $html;

require(XOOPS_ROOT_PATH.’/footer.php’);
?>

2008.2.15 加註:

最近在寫 admin 的模組,由於 admin 預設的樣板 header 大部份都是 hard code,要 customize 的話,如果 client 端是 Firefox ,這些 css、js 外部 include 檔放在 body 內的 script 也可以正常運作。如果要同時相容 Firefox、Internet Explorer 則要透過 DOM 動態將 css、js 載入放進 header,有機會再提供詳細的範例。

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

PHP 程式開發的 Log framework

log4j 幾乎已經是 java 專案開發的標準配備了,在 pear 網站搜尋了一下,找到了一個 logging 的套件,安裝容易,整合也非常方便。

安裝部份:

Fedora 8 只要 ‘yum install php-pear-Log’ 就會自動安裝好所需的套件,Windows 或其他平台如果已經安裝好 PHP、PEAR 套件,應該只要 ‘pear install Log’ 就會自動下載並安裝好套件,windows 的 xampp 是這樣安裝好的。

Coding:

以下是一小段簡短的範例

<?php

require_once ‘Log.php’;

$logger=&Log::factory(‘file’,’myap.log’,’demo.php’);
$logger->log(‘application start’,PEAR_LOG_NOTICE);
$logger->log(‘application finished’,PEAR_LOG_NOTICE);

?>

寫進 myap.log 檔的 log 格式如下

Dec 26 01:11:22 demo.php [notice] application start
Dec 26 01:11:22 demo.php [notice] application finished

支援的 log level 包括

PEAR_LOG_EMERG

PEAR_LOG_ALERT

PEAR_LOG_CRIT

PEAR_LOG_ERR

PEAR_LOG_WARNING

PEAR_LOG_NOTICE

PEAR_LOG_INFO

PEAR_LOG_DEBUG

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Warning: Cannot modify header information – headers already sent by

寫 php 時常遇到這個錯誤訊息,解法也很簡單,如果 php 有 include 其他程式檔的話檢查 <?php 的前面不可以有任何的空行或文字,?> 後面也不要有空行和其他文字就可以了。

2007/12/25 加註:

有些 editor 在處理 utf-8 編碼文件檔時,會在檔案最前面加上幾個 byte 的檔頭,一般編輯時看不到,利用 UltraEditor、NotePad++ 的 Hex mode 可以看到及修改,這種檔案也會造成上述的錯誤,也有看過這種 jsp 檔案 java 無法 compile 的情形。

1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, average: 4.60 out of 5)
Loading...

Propel Object-Relational Mapping (ORM) 解決方案

Java 平台整合 Hibernate 這個 ORM 套件進行開發相當的普遍,現在 PHP 也有 Propel 和其他類似的套件,由於 Propel 已經整合到 symfony 這個 PHP framework,相信技術和穩定方面都達到了一 定程度,最近試著整合的確是有一定的困難度,整理的心得如下:

一 、安裝

在 Fedora 7 上需要以下幾個套件

  1. php-5.2.4
  2. php-pear-1.5.0
  3. php-xml-5.2.4
  4. php-pear-log
  5. php-mysql-5.2.4 (看使用什麼資料安裝對應的套件)

上面的套件並不包含 Propel,不過 PHP 的套件管理的確已經相當成熟,安裝 Propel 相當方便,這裡介紹利用 Pear 安裝的程序:

首先安裝 phing 這個必需的套件

pear channel-discover pear.phing.info
pear install phing/phing

接著以下3個指令就可以裝好 Propel

pear channel-discover pear.phpdb.org
pear install phpdb/propel_generator
pear install phpdb/propel_runtime

請注意指令順序,在安裝過程中 pear 會自動安裝其他所需要的套件.

既然是 ORM 一定會有後端資料庫整合,如果用的是MySQL 請檢查 php5-mysql 套件是否已安裝

二 、應用

Propel 在自動產生 PHP ORM class 時必需有資料庫 schema 檔案,可以參考官方網站的文件來撰寫,檔案完成後 Propel 可以依據 schema 檔案自動建立相關 table,這裡介紹另一個比較常用的模式,資料庫 table 建好後,自動產生 schema 檔案。

先建立 build.properties,mysql 範例如下

propel.project = <project name>
propel.database = mysql
propel.database.url = mysql://<db user>:<db password>@<db host>/<database>

接下來用以下指令就可以自動依據 table 產生 schema.xml

phing -f /usr/share/pear/data/propel_generator/pear-build.xml -Dproject.dir=. creole

* 重點是 pear-build.xml 定義了建立 propel 相關檔案的資料,不同的 distribution 可能在不同位置

有了 build.properties、schema.xml 後請依照官方網站的說明建立 runtime-conf.xml,有了這3個檔案,以下指令就可以自動建立 php 的 class

phing -f /usr/share/pear/data/propel_generator/pear-build.xml -Dproject.dir=.

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...