trong CakePHP, Element được sử dụng khá giống với “include”. Nó dùng để lưu trữ 1 đoạn code được dùng đi dùng lại nhiều lần, thay vì ta phải copy/paste đoạn code đó qua các trang thì ta chỉ việc viết 1 câu lệnh ngắn gọn :
chỉ như cần 1 đoạn code như vậy ta có thể thay thế việc vất vả copy rồi paste liên tục, mất thời gian lại khiến code của bạn nhìn rất tối, khó chỉnh sửa sau này !
VD cụ thể như sau :
trong controller của bạn, bạn thực hiện thêm công việc kiểm tra xem element có được gọi hay ko :
function index() {
$posts = $this->Session->setFlash('hello world');
if (isset($this->params['requested']))
{
return $posts;
}
}
Nếu Element được gọi, giá trị giả về sẽ là dòng text ‘hello world’. (bạn cũng có thể thay thế bằng những câu lệnh theo ý của bạn như : find(), read() …..)
tiếp theo, trong app\views\element\ chúng ta tạo 1 file php, tên tùy ý bạn đặt. Ở ví dụ này tôi đặt tên là test.php :
Component là nơi thực hiện các công việc phức tạp như upload…, nó cũng được dùng đi dung lại nhiều lần ! thay vì việc copy/paste lại công việc thực thi đó ta chỉ cần truyền dữ vào cho Component từ controller. Sau đó dữ liệu sẽ được đưa đến Component xử lý .
VD :
trong app\views\posts\ ta tạo file index.ctp (cakephp 1.2) hay index.thtml (cakePHP 1.1)
trong app\controller\components\ ta tạo 1 file php tên j` j` đó chẳng hạn như : test.php
<?php
class TestComponent extends Object {
function startup(&$controller) {
// This method takes a reference to the controller which is loading it.
// Perform controller initialization here.
}
function hello($text) {
return $text;
}
}
?>
cuối cung, trong post controller ta chỉ việc truyền dữ liệu text vào để component xử lý :
function index() {
if (!empty($this->data))
{
if($this->test->hello($this->data['Post']['text']))
{
$this->Session->setFlash($this->test->hello($this->data['Post']['text']));
$this->redirect (array('action' => 'index'));
}
}
}
chú ý : test là tên file component bạn tạo ở trên, hello là tên function thực thi mệnh lệnh, còn
$this->data['Post']['text'] là dữ liệu bạn nhập vào !
CakePHP là 1 trong số nhiều framework dành cho PHP. Ở đây, chúng tôi chọn CakePHP vì đó là 1 công cụ thân thiệt, dẽ sử dụng, nhanh, mạnh và rất linh hoạt. Để có thể học và sử dụng thành thạo 1 cách nhanh chóng bạn phải biết những kiến thức cơ bản về HTML và PHP.
Bây giờ ta bắt đầu thôi nhỉ, đầu tiên bạn phải download CakePHP về : Download
Cài Đặt:
Để có thể sử dụng framework vừa download về, máy tính của bạn phải đáp ứng thêm 1 số yêu cầu sau :
- Một HTTP server (Apache, ISS). Ở đây tôi sử dụng Xampp vì nó khá phổ thông và còn kèm thêm cho bạn MySQL.
-Database : Cake hỗ trợ các hệ cơ sở dữ liệu sau : MySQL, PostgreSQL.
- Chú ý thêm là CakePHP chỉ support trong PHP ver4 trở lên.
Sau khi download thành công và đáp ứng đủ các yêu cầu trên thì bạn có thể giải nén tập tin (.zip) vừa download về và sao chép vào thư mục chứa Apache server (vd : C:\AppServ\www\CakePHP).
Cấu Hình :
Đầu tiên, để Cake và DataBase hoạt động cùng nhau, bạn phải cấu hình lại file database.php :
-Mở file database.php.default tại /CakePHP/app/config/database.php.default
Với user, password, database lần lượt là: tên user, password và database ở trong MySql. Quy ước về đặt tên bảng trong database
Tên bảng trong cake nên ở dạng tiếng Anh số nhiều (vd: users, customers, students, … )
Bảng phải có primary key tên là ‘id’
Nếu có sử dụng quan hệ trong các bảng vd: user_id (user không có s và dấu _ cộng id)
-Tiếp đến bạn thay đổi tên file thành database.php -Cuối cùng, mở file core.php tại /CakePHP/app/config/core.php. Thay đổi security theo ý của bạn : Configure::write(’Security.salt’, ‘8rnc4ry438tc34jchcyu34cu5cbn4u’); => Configure::write(’Security.salt’, ‘<tùy bạn>’);
Hướng dẫn sử dụng :
Để kiểm tra xem khâu cài đặt có hoàn thành hay không, bạn mở đường dẫn : http://localhost/CakePHP/Ở đây tôi không tiện chụp ảnh lại nên bạn chịu khó nhìn giao diện, nếu không thấy đỏ lòm hay vàng khèj` thì cứ yên tâm là đã ok !Yên tâm hơn nữa thì hãy tìm 2 dòng Your database configuration file is present. và Cake is able to connect to the database. Nếu tìm tháy thì cùng tôi bắt đầu tiếp. Còn nếu có 2 màu đặc biệt đấy thì bạn nên xem lại các bước đã làm !Tạo bảng Cơ Sở Dữ Liệu : tạo bảng customers như sau :
Quên mất, bạn đã biết mô hình MVC (Models-Controller-View) là j` chưa nhỉ, nếu chưa thì bạn cứ hiểu nôm na như sau : Mô hình MVC trong lập trình hướng đối tượng hoạt động theo 3 tầng, tầng trên cùng là View, tiếp theo là Controller và tầng dưới cùng là Models.
- Models : dùng để giao tiếp với Cơ Sở Dữ Liệu của bạn.
-Controller : dùng để tạo các function để viết các yêu cầu theo ý muốn, lấy dữ liệu từ Cơ Sở Dữ Liệu thông qua Models và hiển thị ra tại View.
-View : là nơi thể hiện dữ liệu đã được xử, hoặc từ đây ta có thể nhập dữ liệu mới, sau đó Controller sẽ lấy dự liệu từ View chuyển về cho Models để lưu vào Cơ Sở Dữ Liệu. Nói nhanh cho vuông thì View cũng có thể coi là 1 trang template.
*Để hiểu thêm về mô hình MVC thì bạn hãy search google và tìm hiểu thêm, còn bây giờ tôi phải vào mục chính là làm việc với CakePHP.
Chúng ta bắt đầu làm việc theo thứ tự 3 tầng MVC từ thấp đến cao.
Đâu tiên là Model : mở trình soạn, tạo file customer.php tại \CakePHP\app\models\customer.php
<?php
class Customer extends AppModel
{
var $name = 'Customer';
}
?>
Tiếp đến là Controller : tạo file custermers_controller.php tại \CakePHP\app\controllers\custermers_controleller.php
<?php
class CustomersController extends AppController
{
var $name = 'Customers';
function index()
{
$this->set('customers', $this->Customer->findAll());
}
}
?>
Cuối cùng là View : file index.ctp tại \CakePHP\app\view\custermers\index.ctp
Có vẻ ổn rồi, bạn hãy thử mở đường dẫn http://localhost/CakePHP/custermers để xem kết quả của chương trình bạn vừa viết. Và sau đó tìm hiểu thêm nhiều tính năng nữa của Cake nhé, khi đó bạn sẽ rất “sướng” cho mà xem.
Hôm nay cài lại server ssh lên không thiêng .
Lỗi là tại RSA key ở client đã cũ (do ssh server được cài lại).
gõ lệnh sau để gen lại ssh key cho client
Công việc này có thể làm bạn nghĩ đến giải pháp google maps nhưng theo tôi dùng google map và maker api của nó là quá phức tạp . Thôi thì tự làm một cái vậy .
Yêu cầu của bài toán là vẽ một bàn đồ nước việt nam , trên đó vị trí các tỉnh thành phố có đại lý của công ty XYZ thì xuất hiện maker (Dùng hình ngôi sao hoặc chấm tròn) và tên tỉnh thành pố có đại lý đo .
Nếu người dùng click vào tỉnh thành phố nào thì xuất hiện chi tiết danh sách các đại lý trực thuộc tỉnh thành phố đó .
Các đồ nghề cần sài : Flash IDE (CS2) , PHP 5 , Mysql 5 , GIMP (Hoặc PS)
Đầu tiên là làm một cái flash có hiển thị tên các tỉnh thành .
B2. Tạo flash document có kích thước lớn hơn bức anh một chút : 325×680
Import bản đồ vào .Kéo bản đồ từ lib vào stage nếu bạn import nó vào lib . Đặt tên cho instance là map .
Xong .
B3. Vẽ hình ngôi sao
Convert ngôi sao thành Moviclip (nhớ chọn option Export for Actionscript) . Đặt tên cho Class là ” Star” .
B4. Tạo file chứa tên tỉnh thành và tọa độ của chúng . Tất nhiên cái này phải lấy từ csdl nhưng trước mắt cứ lấy đại một cái file tĩnh đã , sau này chỉ cần sửa lại url trỏ vào file php là xong .
tạo một file data.txt để giả lập dữ liệu lấy ta từ csdl . giả sử file này đặt ở http://localhost:81/data.txt
data.txt:
Hanoi=30-20&Saigon=40-50
Tôi lưu file theo cấu trúc : “tên tinht thành=tọa độ x- tọa độ y”
tiếp theo mở actionscript code thẳng vào frame 1 .
import flash.net.*;
var myLoader:URLLoader = new URLLoader()
//the data will come as URL-encoded variables
myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
//Load using an URLRequest, even beeing local
myLoader.load(new URLRequest(”http://localhost:81/data.txt”));
//add a listener for the complete event
myLoader.addEventListener(Event.COMPLETE, onLoadHandle);
function onLoadHandle(ev:Event):void{
for (var name in myLoader.data){
trace(name+”:”+myLoader.data[name]);
}
}
Chạy thử đoạn code trên :
kq:
Hanoi
30-20
Saigon
40-50
Tiếp theo là thay vì trace ta sẽ add các ngôi sao lên các vị trí tương tứng :
var mc:Star = new Star();
var valuePair:String=String(myLoader.data[name]);
var arr= valuePair.split(”-”);
mc.name=name;
mc.x=arr[0];
mc.y=arr[1];
addChild(mc);
Thay đoạn code này vào trong vòng for .
Ta sẽ thấy xuất hiện 2 ngôi sao ở vị trí 30-20 và 40-50 .
Giờ là lúc tìm vị trí chính xác cho 2 ngôi sao này (Dùng GIMP đo tọa độ trên ảnh )
Đây là kết quả của tôi (chắc chắn là chưa chính xác vì tôi áng khoảng thôi , bạn phải khớp với bản đồ thật)
Hanoi=137-108&Saigon=179-570
Chạy lại : Hai ngôi sao đã phù hợp với vị trí các tinht thành , nếu muốn có thêm các tỉnh thành khác bạn chỉ việc thêm vào file data.txt .
B5. Xử lý tên tỉnh thành nằm cạnh ngôi sao :
import flash.net.*;
import flash.text.TextField;
var myLoader:URLLoader = new URLLoader()
//the data will come as URL-encoded variables
myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
//Load using an URLRequest, even beeing local
myLoader.load(new URLRequest(”http://localhost:81/data.txt”));
//add a listener for the complete event
myLoader.addEventListener(Event.COMPLETE, onLoadHandle);
function onLoadHandle(ev:Event):void{
for (var name:String in myLoader.data){
var mc:Star = new Star();
var valuePair:String=String(myLoader.data[name]);
var arr= valuePair.split(”-”);
mc.name=name;
var txt:TextField = new TextField();
txt.text=mc.name;
Mặc định rằng các bạn đang đọc bài này là những người làm trong ngành nên tôi sẽ không giải thích hay ghi chú những khái niệm phổ thông. Mặt khác, lý lẽ trong bài viết này chỉ phản ánh quan điểm của cá nhân tôi, không đại diện cho ai hay tổ chức nào khác.
—
Lịch sử ngành công nghiệp máy tính & mạng đã chứng minh PHP là một trong số những ngôn ngữ mạnh & linh động nhất trên nền Web và cũng không quá khó để thành thục ở mức phổ thông. Được phát triển và biết đến từ những năm cuối của thập kỷ trước, PHP đã đạt được sự tăng trưởng đáng kinh ngạc so với các ngôn ngữ lập trình khác.
PHP Timeline
Nhìn biểu đồ trên, ta thấy con đường đi lên của PHP là theo hướng phát triển truyền thống, tức là Thiết kế -> sử dụng -> chỉnh sửa -> lớn mạnh -> phát triển. Điều thú vị là cho đến nay, rất nhiều các sản phẩm được phổ biến rộng rãi cũng đi theo con đường trên như các nền tảng .NET, Java hay Linux.
Ta lần lượt điểm qua một số điểm mẫu chốt sau
Vòng đời
Một lần nữa, nhắc lại thế mạnh của PHP trên nền web chính là tốc độ (phát triển & thực thi), nhẹ & dễ học. Bên cạnh đó, do đặc tính mã nguồn mở (theo giấy phép PHP) cũng như sự đổi mới về phong cách khi ra đời, PHP sở hữu rất nhiều thứ quý giá
Cộng đồng lớn. Khoản này vô đối. Luôn có những guru sẵn sàng chia sẻ kinh nghiệm & kiến thức, hướng dẫn những người mới và giải đáp thắc mắc.
Thư viện, cả nội tại và mở rộng của PHP, có chứa số lượng function cực lớn được đóng góp bởi những người tình nguyện. Con số vào khoảng 700 buit-in functions và uncountable external functions (hoangnd tính toán).
Framework đa dạng về số lượng cũng như chất lượng, thậm chí đa dạng cả về mô hình và mục đích sử dụng.
Sự mở rộng và phát triển
Khái niệm về namespace. .NET đã có từ lâu, Java cũng có khái niệm package gần tương đương, và bây giờ chúng ta chứng kiến PHP. Đành rằng namespace ra đời với mục đích cơ bản là giúp lập trình viên dễ tổ chức và quản lý code hơn, nhưng với PHP thì tôi cho rằng là một sự ôm đồm. Mặc dù có rất nhiều những giải thích về cách gõ namespace trong PHP, nhưng thực sự là rất khó chấp nhận ký tự “\” để phân cách. Thứ nhất là hơi va chạm với tư tưởng chạy đa nền của PHP vì ký tự “\” được dùng phổ biến trong windows để phân tách đường dẫn. Thứ hai là có vẻ như PHP đã sử dụng cạn kiệt tài nguyên bàn phím.
PHP cho đến nay đã quá rộng lớn và các lập trình viên dễ dàng tìm được nhiều giải pháp khác nhau cho cùng một bài toán. Điều này thể hiện rất rõ ràng tư tưởng “open and share” mà nhờ nó, nhân loại mới có được kho tri thức khổng lồ (không chỉ trong ngành khoa học máy tính mà còn ở tất cả các lĩnh vực khác). Tuy nhiên, hãy nhìn Python làm, bạn có rất ít những cách để xử lý một vấn đề và thường thì những cách đó luôn là cách tốt nhất và dễ dàng nhất cho bạn, đến nỗi bạn chả buồn nghĩ tới hướng khác :P. Ở phía đối diện, .NET độc quyền gắn chặt với hệ điều hành Window$ của Micro$oft nhưng có sự thống nhất, rõ ràng và ổn định cực tốt (nếu bạn chọn phát triển trên nền tảng này).
Yahoo và facebook xài PHP
Quá đúng, bỏ qua phần backend thì chính những đoạn mã PHP đã dựng lên bộ mặt yahoo & facebook như bây giờ. Và nó đã chứng minh giá trị của mình khi cả Yahoo & facebook đều đã hoặc đang trở thành những đế chế internet với danh tiếng, lợi nhuận & lượng người dùng cực lớn, chưa kể đến số lượng các dịch vụ kèm theo.
Thế nhưng, trong các đăng báo tuyển dụng, họ luôn muốn ưu tiên những ứng viên biết thêm Perl hoặc Python bên cạnh thành thạo PHP (bỏ qua các yêu cầu khác). Câu hỏi đặt ra là, họ (yahoo & facebook) định cho những ứng viên này làm cả ở nền tảng trên & dưới của hệ thống web application? hay họ muốn những ứng viên đó có được tư duy ngôn ngữ của perl, python? hay nữa là họ muốn dự phòng và sẵn sàng chuyển đổi sang perl, python? (lol)
Đặc điểm
Một chút hình dung
Có nghĩa lý gì? Ai cũng biết .NET là một nền tảng còn PHP là một ngôn ngữ lập trình, tất nhiên sẽ là không hợp lý nếu so sánh chúng với nhau. Cái tôi muốn đề cập là, với .NET chúng ta có thể sử dụng để lập trình web, windows application, mobile, embedded, cloud … với sự tách biệt không quá lớn dành cho lập trình viên (tất nhiên môi trường triển khai thì không nói). Còn PHP không thể đứng một mình, nó sẽ kết hợp với các công nghệ khác tạo thành những nền tảng thực thi bài toán, mà chất lượng kết quả bài toán đó phụ thuộc rất nhiều vào kinh nghiệm & kiến thức của kiến trúc sư trưởng dự án. Sợi dây liên kết này tôi cho rằng là kém vững trãi hơn so với .NET
Ngoài ra, mô hình trên còn thể hiện một nội dung khác. Nếu coi mỗi ngôn ngữ là một tập thông tin thì chúng liên kết với nhau qua giao của những tập đó. Có nghĩa là PHP sẽ đứng chung với python, perl, ruby … Và cũng có nghĩa là tôi sẽ chọn python thay vì PHP để kết hợp với flex. Tức là PHP đã mất đi một người dùng là tôi, ít nhất là trong dự án nào đó.
Buồn ngủ quá nên đoạn này viết hơi sơ sài và lung tung, sẽ cập nhật lại sớm thôi
Tuy nhiên
Các lập trình viên PHP đừng quá buồn và suy nghĩ nhiều làm gì, PHP đã, đang và sẽ luôn làm rất tốt trong phân khúc thị trường của nó. Và trong 1, 2, 3 năm nữa có thể ta có PHP phiên bản 6.0, 6.1, 6.2 … nhưng rồi nó sẽ phát triển tiếp thành cái gì? Cộng đồng không có nhiều người biết, tôi cá là bạn không biết, còn tất nhiên là tôi không biết roài.
Quay trở lại vấn đề Start Server & làm cho Server chào Helloworld – điều mà không phải ai cũng đủ kiên trì làm được với bài tut trước. Bài tut này sẽ trình bày lại một cách đơn giản cách Start Server, bỏ qua việc giới thiệu & quảng cáo về PDS.
C Công việc sẽ chia thành mấy bước thế này:
- Build Path cho các file .jar trong thư viện của PDS vào project
- Tạo class HelloWorld
- Tạo thư mục conf
- Viết hello.xml
Trước hết, muốn làm việc với PDS thì phải down nó về đã. Down ở đây:
download và giải nén 2 gói Project Darkstar Server, source & binary và Project Darkstar Java Client SDK, source & binary là đủ dùng.
Bây giờ tạo một project Java, ví dụ tên là PDSHelloServer.
1. 1. Build Path: (lấy thư viện của PDS Server)
Chuột phải vào System library-> Build Patch -> Configure Build Path -> Add External Jars. Sau đó chỉ đường dẫn vào sgs-server-dist->lib, chọn tất cả file đuôi jar -> ok . Sẽ xuất hiện thư mục Referenced Library.
2. 2. Tạo 1 package tên là helloServer trong project, copy class HelloWorld trong sgs-server-dist-0.9.8\tutorial\src\com\sun\sgs\tutorial\server\lesson1, nhớ đổi tên package
3. 3. Tạo thư mục conf trong Project copy các file Helloworld.boot , Helloworld.properties , logging.properties trong sgs-server-dist-0.9.8/tutorial/conf vào thư mục conf.
Chỉnh sửa một số thông tin trong các file này như sau:
I was always against Copy and Paste programming. I condemned people who use this practice as discrediting the honorable profession of The Programmer. This evil activity inflates application code without adding anything useful. This shameful practice causes various complications - more code, more things to remember, needless complexity, and difficulty to manage and synchronize related changes in the future. But at some point, I admitted to myself - things are not so black and white. I do Copy and Paste in my code, it is difficult to resist this seductive activity.
The only indulgence is that I’m very keen to eliminate bad effects of Copy and Paste before finishing my task.
I use two main approaches for writing new code. The first is Top-Down - I have clear design ideas how I should program and I know what classes and components to use. I go ahead and write code from scratch using my memory and power of intellect :). There are few problems with this approach. Unfortunately, my memory is not so great and knowledge is not so vast. Regularly I have new tasks that I don’t know or don’t remember how to program. Sometimes I don’t get immediately what other people programmed without debugging. And often I want to save time and avoid re-implementing the same idea again. And that is why I also use the second approach - Bottom-Up. I copy and paste code first. And after I figure out how this code works, how to use, fit and improve it.
When is Copy and Paste approach useful?
Shamelessly, I can come up with few cases:
1. Work by example - you found new code through search and want to use it immediately to solve your problems.
2. Quick start - you copy code (including your old code) to save time.
3. Test in the new context - you want to quickly assess if code will be correctly running in the context of your application
4. Too hard to reuse - if you cannot reuse, just copy code. For example, you don’t have time to build common framework with separate application or another team owns code and don’t want you to touch and spoil it.
5. Series of experiments - you try to find the best way to solve a problem and copy code to try if it solves a problem well.
How to eliminate bad effects of Copy and Paste
Now I’m going to return to canonical view on evilness of Copy and Paste. Even if you have legitimate reason to use Copy and Paste, it is acceptable only on temporary basis before you commit your code or your team granted absolution (probably for very short time) :).
Therefore, after committing Copy and Paste scandalous act, do following:
1. Understand what have you done - any code that you don’t understand is ineffective for future use, and potentially excessive, wasteful and dangerous.
2. Clean, minimize and shape - remove all useless, over-engineered and questionable pieces; consider yourself as a jeweler, who is converting rough crystals in beautiful diamonds that fit well into solid code and concepts in your program.
3. Refactor and Integrate - use refactoring techniques to integrate new cleaned code into existing application: improve design, simplify and increase power of your code.
4. Learn - the best outcome of this sinful activity is gained knowledge and experience that will make Copy and Paste unnecessary next time.
With age and experience of harsh programming reality, I’m becoming less purist and more pragmatic. I have started to accept everything what makes me effective. The only rule - I shouldn’t be ashamed of my code after the finish… even if I did Copy and Paste couple times
1. DarkStar là gì?
Project DarkStar (PDS) là một dự án mã nguồn mở viết bằng java được phát triển nhằm đơn giản hóa việc phát triển các dự án như game trực tuyến trên qui mô lớn, xây dựng một thế giới ảo, hoặc các ứng dụng mạng xã hội. Thay vì phải mất thời gian code, thì nay tất cả đều có sẵn trong PDS. 2.Cụ thể PDS dùng để làm gì ?
-PDS dùng để xây dựng Server và Client cho ứng dụng.
-Tạo một mạng Game lớn, đồ sộ, đáng tin cậy, ổn định, quan trọng là không bị đứt khi gặp lỗi . 3.Cài đặt và chạy Darkstar : Dowload Project tại trang chủ http://www.projectdarkstar.com/ để có phiên bản mới nhất (có 2 gói, một là sgs-server-dist dùng cho server và sgs-client-dist cho client, ở đây sẽ lấy ví dụ ở sgs-server-client) .
Sau khi giải nén, ta được thư mục sgs-server-dist. Trong thư mục này có những hướng dẫn cụ thể, những bài thực hành của PDS trong mục tutorial. Dưới đây là hướng dẫn để áp dụng PDS vào dự án của mình. 4. Áp dụng: (Lesson 1 : Hellowolrd) - Vào Eclipse, tạo Project java.
- Trong thư mục src : tạo package chứa class HelloListener (copy từ /sgs-server-dist-0.9.8/tutorial/src/com/sun/sgs/tutorial/server/lesson1)
- Lấy thư viện của sgs-server-dist : Chuột phải vào System library-> Build Patch -> Configure Build Path -> Add External Jars. Sau đó chỉ đường dẫn vào sgs-server-dist->lib, chọn tất cả file đuôi jar -> ok . Sẽ xuất hiện thư mục Referenced Library.
- Tạo thư mục conf trong Project, copy các file Helloworld.boot , Helloworld.properties , logging.properties trong sgs-server-dist-0.9.8/tutorial/conf vào thư mục conf.
- Cuối cùng, tạo một file.xml (dùng ant xml để chạy vì đơn giản hơn so với việc viết bằng ngôn ngữ khác các chức năng). File có nội dung như sau :
<!--Dùng ant thay cho code java, khả năng tương thích cao, được dịch ngay khi compile,
đây là phương pháp đơn giản, dễ sử dụng -->
<project default="jar">
<!--bắt buộc phải có target clean trong mỗi ant -->
<target name="clean">
<delete dir="jar"></delete>
</target>
<!-- nén file từ basedir thành destfile (trong thư mục project của minh)-->
<target name="jar">
<mkdir dir="jar"/>
<jar destfile="jar/phom.jar" basedir="bin"/>
<!--copy file jar-->
<copyfile dest="/home/legend/Desktop/sgs-server-dist-0.9.8/lib/phom.jar" src="jar/phom.jar"/>
<copydir dest="/home/legend/Desktop/sgs-server-dist-0.9.8/phom/conf" src="conf"></copydir>
<!--delete để có thể chạy lại application-->
<delete dir="/home/legend/Desktop/sgs-server-dist-0.9.8/phom/data"></delete>
<!--start application với tham số bên dưới-->
<java fork="true" jar="/home/legend/Desktop/sgs-server-dist-0.9.8/bin/sgs-boot.jar" >
<arg value="/home/legend/Desktop/sgs-server-dist-0.9.8/phom/conf/Phom.boot"></arg>
</java>
</target>
</project>
- Chạy file.xml này ( chuột phải -> run as -> ant build)
Cấu trúc của một module có thể gồm nhiều tập tin khác nhau, nhưng phải có ít nhất một tập tin tên_module.info và một tập tin tên_module.module, tên này không được trùng với các module đã tồn tại trong hệ thống.
Tạo file *.info:
Cấu trúc của một tập tin *.info có dạng:
- Name = tên của module, bắt buộc phải có.
- Description = mô tả các chức năng của module, bắt buộc phải có.
- Version = phiên bản của module.
- Package = nhóm các chức năng của module, nếu không khai báo package thì module được đưa vào nhóm “other”.
- Dependencies = các module phụ thuộc, cách nhau bằng khoảng trống. Nếu module được yêu cầu chưa được bật trên hệ thống thì module này không thể bật được.
Tạo file *.module:
+ Bắt đầu và kết thúc với thẻ <?php ?>
+ Chúng ta có thể ghi chú thích cho nhiều dòng sau dấu ‘/*’ và kết thúc ghi chú dùng dấu ‘*/’, chú thích cho một dòng dùng dấu ‘//’.
+ Viết code: viết các hook mà chúng ta cần xử lý.
2. Hook trong Drupal :
Hook được xem như là các sự kiện (event) bên trong bộ nhân Drupal. Hook được gọi là các hàm callbacks, đây là cách phổ biến nhất để tương tác với nhân Drupal. Module sử dụng hook để tương tác với hệ thống. Mỗi hook có tham số và giá trị trả về nhất định. Một hook là một hàm PHP được đặt tên theo dạng: codepro_user(), trong đó codepro là tên của module còn user là tên của hook. Mỗi hook sẽ có những thông số đầu vào khác nhau và trả về các kết quả khác nhau.
Tùy theo chức năng và mức độ phức tạp của module mà người thiết kế có thể sử dụng các hook thích hợp.
http://api.drupal.org/api/group/hooks/6
VD: Tạo module demo, viết hook bắt sự kiện login, logout .
- Tạo folder demo trong folder modules.
- Tạo 2 file demo.info, demo.module.
- Viết function hook_user() trong demo.module.
<?php
function hook_user($op, &$edit, &$account, $category = NULL)
{
if ($op == 'login' )
{
die("hook user login");
}
if ($op == 'logout' )
{
die("hook user logout ");
}
}
?>