Thứ Ba, 6 tháng 8, 2013

Tự học PHP dễ hay khó



Tự học lập trình PHP dễ hay khó ?

Ngày nay với sự bùng nổ của công nghệ, thật không quá khó để tìm ra tài liệu cho bất kỳ nghiên cứu gì. Nhất là đối với các kiến thức lập trình. Một trong những tài liệu được xếp vào hàng cung cấp nhiều nhất trên các danh mục thứ hạng tìm kiếm của toàn thế giới.

Và việc học PHP cũng như thế, chính vì nó dễ kiếm và nhiều sự đa dạng. Nên các bạn sẽ cảm thấy rất dễ tiếp cận với PHP. PHP khởi nguyên là một dạng mã nguồn mở được rất nhiều lập trình viên trên thế giới phát triển và không ngừng cải thiện những mặt hạn chế mà vỗn dĩ thời non nớt của PHP vẫn thường mắc phải.

Quả thật việc học PHP với người bắt đầu có phần dễ và nhẹ nhàng hơn so với các ngôn ngữ khác như ASP.NET hay C#. Nhưng sự thật để làm chủ được ngôn ngữ PHP thì thật không đơn giản. PHP hiện tại là PHP 5.x, chính vì thế mà sức mạnh của PHP 5.x được phát huy tối đa thông qua sự hỗ trợ hướng đối tượng, xét về mắt khách quan thì PHP đem lại cho người dùng cảm giác thân thiện và đơn giản hơn so với các ngôn ngữ khác. Nhưng thiết nghĩ nếu vì dễ tiếp cận mà bạn cho rằng PHP dễ học thì quả thật đó là một sai lầm rất lớn trong nhận thức của bạn.

Về bản chất PHP mang gốc gác và tính nguyên thủy của Java, nên đôi khi bạn cảm nhận PHP có vẻ như có họ hàng với java chăng ?. Hay một số hàm dùng lại của C khiến bạn liên tưởng tới việc học PHP cũng dễ như học C. Thực tế qua các cuộc khảo sát trên toàn thế giới cho thấy PHP chiếm phần đông người sử dụng. Nhưng để gọi là một chuyên gia về PHP thì quả thật số lượng ấy quá khiêm tốn so với phần đông người sử dụng kia. Có mộtlập trình viên từng nói "học php để làm website quả thật rất dễ, nhưng học php để phát triển website thì đúng là nghịch cảnh". Câu nói ấy có thời từng bị lên án gay gắt vì số đông người cho rằng họ vẫn đủ tự tin để không những phát triển website mà còn viết ra hàng trăm dự án khác trên PHP.
Một số chuyên gia đã kiểm chứng khi dẫn chứng các source code được viết bằng PHP của phần đông kia thì quả thật họ có một kết luận chung là "mã lệnh quá thập cẩm". Vì nó thoải mái trong việc lập trình nên giúp người lập trình dễ tùy biến khi viết lệnh. Nhưng lại vô tình đẩy PHP đến chỗ tùy tiện trong việc truy xuất và xử lý. Nhìn chung thì website vẫn hình thành, vẫn chạy rất tốt. Nhưng giả sử khi cần phát triển tiếp, khi cần bàn giao hay khi sử dụng website ấy với số lượng lớn người truy cập thì việc có tối ưu hay không lại trở thành con đường sống còn của một trang web. Vậy phải chăng lập trình webiste bằng PHP là dễ vì đơn giản nó dễ tiếp cận ?.

Với chúng ta, làm website nhỏ thì kiến thức vận dụng cũng nhỏ nên chúng ta nghĩ nó dễ. Thử nhìn lên các hệ thống lớn như joomlavbulletindrupal....sao chúng ta quá nhỏ bé, đôi khi xem code của họ mà chúng ta cứ cảm giác lùng bùng như sấm bên tai. Đó là lý giải của việc kiến thức cao cấp PHP nó khó đến mức nào. Cần lắm một cách học hiệu quả, cần lắm một giải pháp tối ưu và cũng cần lắm một chiến lược hiệu quả cho việc nắm bắt chúng.

Nếu bạn thực sự nghĩ PHP là sự nghiệp mà mình cần theo đuổi, đừng ngần tìm hiểu về nó, đừng ngần ngại tới các lớp học để được truyền đạt kiến thức. Vì thế giới sẽ mở ra trước mắt bạn một kiến thức mà phần đông các lập trình viên yêu thích và rồi bạn sẽ cảm thấy rằng học PHP để có được những bước thành công trong sự nghiệp là điều không quá tầm tay của bạn.

Drupal nâng cao - 2. Working with Database


LÀM VIỆC VỚI DATABASE TRONG DRUPAL

posted 25 Jun 2013 01:40 by Nam Minh
1. DATABASE ABSTRACTION LAYER.
+ Drupal sẽ biết database nào dùng để kết nối và username, password cần để thiết lập kết nối với database bằng cách tìm kiếm trong file settting.php. File này đặc thù sẽ nằm ở drupal\sites\default. Dòng định nghĩa kết nối với database như sau :
Code: Chọn hết
$db_url = 'mysql://username:password@localhost/databasename';
+ Đã bao giờ bạn có một project và bạn cần thay đổi hệ thống database, bạn phải bỏ ra rất nhiều thời gian để chỉnh sửa code? Với database abstraction layer, bạn sẽ ko còn phải làm những công việc này, ví dụ : khi chuyển từ MySQL sang PostgreSQL bạn sẽ phải thay đổi mysql_quer() thành pg_query(), Drupal sẽ sử dụng db_query() và bạn không cần quan tâm đến hệ thống database đang sử dụng nữa.
+ Lớp Database abstraction được đưa ra với 2 mục đích chính :
- Giúp cho code của bạn tương thích với bất kỳ hệ thống database nào.
- Ngăn chặn các cuộc tấn công bằng lỗi SQL-injection.
+ Drupal xác định kiểu database để kết nối thông qua biến $db_url bên trong file setting.php. Ví dụ : nếu biến $db_url bắt đầu với mysql, Drupal sẽ include file includes/database.mysql.inc, nếu nó bắt đầu với pgsql Drupal sẽ include file includes/database.pgsql.inc
Hình ảnh
2. THỰC HIỆN TRUY VẤN
+ Drupal sẽ tự động kết nối với database và bạn sẽ không cần phải lo lắng về điều này.
+ Hàm db_query() của Drupal thường được dùng để để truy vấn với kết nối database đã active. Những truy vấn này bao gồm SELECT, UPDATE, INSERT và DELETE.
+ Ví dụ : lấy tất cả các dòng và các fields của bảng joke với field vid và nó cùng trị với $node->vid :
Code: Chọn hết
db_query('SELECT * FROM {joke} WHERE vid = %d', $node->vid);
+ Thêm vào 1 dòng :
Code: Chọn hết
db_query("INSERT INTO {joke} (nid, vid, punchline) VALUES (%d, %d, '%s')",
$node->nid, $node->vid, $node->punchline);
+ Cập nhật :
Code: Chọn hết
db_query("UPDATE {joke} SET punchline = '%s' WHERE vid = %d", $node->punchline,
$node->vid);
+ Xóa :
Code: Chọn hết
db_query('DELETE FROM {joke} WHERE nid = %d', $node->nid);
+ Đây là những cú pháp của Drupal mà bạn cần biết khi viết câu truy vấn SQL. Sau đây là bản tham số của Drupal SQL :
Hình ảnh
+ Tham số đầu tiên của db_query() luôn luôn là câu truy vấn, những cái còn lại là những giá trị động, nó sẽ được validate và thêm vào câu truy vấn.
3. NHÂN KẾT QUẢ TRUY VẤN.
+ Có nhiều cách để nhận kết quả truy vấn, phụ thuộc vào việc bạn cần 1 dòng hay toàn bộ tập kết quả hoặc bạn cũng có thể mở rộng kết quả.
+ Để lấy một giá trị đơn :
Code: Chọn hết
$sql = "SELECT COUNT(*) FROM {node} WHERE type = 'blog' AND status = 1";
$total = db_result(db_query($sql));
+ Để lấy nhiều dòng :
Code: Chọn hết
$sql = "SELECT * FROM {node} WHERE type = 'blog' AND status = 1";
$result = db_query(db_rewrite_sql($sql));
while ($data = db_fetch_object($result)) {
$node = node_load($data->nid);
print node_view($node, TRUE);
}
+ Lấy kết quả có giới hạn :
Code: Chọn hết
$sql = "SELECT * FROM {node} n WHERE type = 'blog' AND status = 1 ORDER BY
n.created DESC";
$result = db_query_range(db_rewrite_sql($sql), 0, 10);
Thay vì sử dụng từ khóa LIMIT trong câu truy cấn, chúng ta lại dùng db_query_range(). Tại sao lại dùng như vậy? Bởi vì không phải tất cả các hệ quản trị dữ liệu đều cung cấp từ khóa LIMIT.
+ Lấy kết quả để thể hiện thành trang (kĩ thuật dàn trang) :
Code: Chọn hết
$sql = "SELECT * FROM {node} n WHERE type = 'blog' AND status = 1 ORDER BY n.created DESC"
$result = pager_query(db_rewrite_sql($sql), 0, 10);
while ($data = db_fetch_object($result)) {
$node = node_load($data->nid);
print node_view($node, TRUE);
}
// Add links to remaining pages of results.
print theme('pager', NULL, 10);.
Hàm theme('pager') sẽ hiện thị các link đến các trang khác.
4. SỬ DỤNG BẢNG TEMPORARY
+ Nếu bạn làm việc với nhiều tiến trình, bạn có thể tạo bản Temporary (bảng tạm) trong suốt quá trình truy vấn. Bạn có thể dùng hàm db_query_temporary() với cú pháp như sau :
Code: Chọn hết
$result = db_query_temporary($sql, $arguments,
$temporary_table_name);
+ Sau khi tạo bảng temporary, bạn có thể dùng nó. Ví dụ: trong hàm do_search() của module Search, việc tìm kiếm được thực hiện qua nhiều giai đoạn bằng cách dùng các bảng tạm để lưu trữ thông tin trung gian :
Code: Chọn hết
// Select initial search results into temporary table named 'temp_search_sids'.
$result = db_query_temporary("
SELECT i.type, i.sid, SUM(i.score * t.count) AS relevance, COUNT(*) AS matches
FROM {search_index} i
INNER JOIN {search_total} t ON i.word = t.word $join1
WHERE $conditions
GROUP BY i.type, i.sid
HAVING COUNT(*) >= %d",
$arguments, 'temp_search_sids');
...
// Later: calculate maximum relevance, to normalize it, using temporary table.
$normalize = db_result(db_query('SELECT MAX(relevance) FROM temp_search_sids'));
...
// Still later: create a temporary search results table named 'temp_search_results'.
$result = db_query_temporary("
SELECT i.type, i.sid, $select2
FROM temp_search_sids i
INNER JOIN {search_dataset} d
ON i.sid = d.sid AND i.type = d.type $join2
WHERE $conditions $sort_parameters",
$arguments, 'temp_search_results');
...
// Finally: do actual search query.
$result = pager_query("SELECT * FROM temp_search_results", 10, 0, $count_query);
5. ĐẶT CÁC CÂU TRUY VẤN VÀO CÁC MODULE KHÁC VỚI HOOK_DB_REWRITE_SQL().
+ Các hook dùng để thay đổi các câu truy vấn được tạo ra ở một nơi khác trong Drupal để bạn không phải thay đổi các module một các trực tiếp.
+ Nếu bạn gởi một câu truy vấn đến hàm db_query() và bạn nghĩ rằng những người khác muốn thay đổi nó, bạn nên sử dụng db_rewrite_sql() để làm cho câu truy vấn có thể được tương tác bởi những người phát triển khác.
+ Khi một câu truy vấn được thực thi, đầu tiên nó sẽ kiểm tra xem tất cả các module có cài đặt hook db_rewrite_sql hay không, nếu có nó sẽ đưa cho chúng thay đổi câu query.
+ Ví dụ : module node sẽ thay đổi các câu truy vấn để liệt kê danh sách các node và ngăn chặn các node đã được bảo vệ bởi accsess rule.
+ Nếu bạn không đưa ra các câu truy vấn và muốn module của mình có thể thay đổi các câu truy vấn khác, bạn hãy cài đặt hook này trong module của bạn.
+ Để ghi đè các câu truy vấn :
Code: Chọn hết
function hook_db_rewrite_sql($query, $primary_table = 'n',
$primary_field = 'nid',$args = array())

Drupal nâng cao - 1. Cơ chế Hook


Cơ chế Hook của Drupal

Hook là gì?

Hook là một kỹ thuật mà ở đó cho phép chặn, bắt, theo dõi, xử lý các sự kiện (event) từ ứng dụng tới ứng dụng, ứng dụng tới hệ điều hành và hệ điều hành tới ứng dụng hay nói cách khác là có thể chặn, bắt, theo dõi, xử lý các sự kiện trước khi nó tới nơi tiếp nhận.

Ví dụ:

Cách làm việc của chương trình soạn thảo văn bản Unikey, và chương trình từ điển Lingoes. Cách làm việc của chúng là đón lấy các sự kiện về gỏ bàn phím, và các sự kiện từ con chuột để xử lý các thao tác riêng.

Xét về phạm vi hoạt động thì có hai loại Hook:

  • Hook toàn cục (có phạm vi ảnh hưởng tới toàn hệ thống).
  • Hook cục bộ (chỉ có tác dụng trên ứng dụng được cài Hook).

Cơ chế Hook của Drupal:

Trong Drupal các Hook được định nghĩa trong nhân của Drupal (có thể phát triển thêm các Hook mới), chúng được xem như là các sự kiện (event) và được gọi chung là các hàm callbacks. Các module dùng các Hook để tương tác với nhân Drupal mà không cần phải chỉnh sửa trực tiếp trong nhân.
Hook trong Drupal có dạng như sau: hook_user() -> mymodule_user() trong đó mymodule là tên module còn user là tên hook.

Ví dụ:

Khi user đăng nhập vào hệ thống Drupal, Drupal phát sinh ra hook_user(), có nghĩa là tất cả các module có dùng tới hàm hook_user() sẽ được gọi.

Các loại Hook trong Drupal:

Trong Drupal có nhiều loại Hook, mỗi Hook thực hiện nhiệm vụ khác nhau, các bạn có thể xem chi tiết về hook tại http://api.drupal.org/api/group/hooks/6.

Các hook bắt buộc khi tạo Field type mới cho Drupal (7+)

Trước khi tìm hiểu những hook bắt buộc phải biết một Field type gồm những thành phần nào, theo kiến trúc của Field API thì một Field type gồm 3 thành phần chính:
  1. Đinh nghĩa thông tin cho Field - Phần định nghĩa Field này khai báo thông tin như: Khai báo thông tin cho Field, định nghĩa cấu trúc CSDL cho Field, kiểm tra giá trị hợp lệ, kiểm tra Field rổng hay không.
  2. Định nghĩa Formatter cho Field - Khai báo kiểu hiển thị của Field.
  3. Định nghĩa Widget cho Field - Khai báo phần nhập liệu của Field.
Vậy khi viết một Field type mới cần bắt buộc các hook sau đây:
Ngoài các hook bắt buộc trên còn các hook khác như hook_field_widget_error, hook_field_settings_form,... khi đụng chạm thực tế thì cần tìm hiểu thêm ở những module thực tế.
Xét về phạm vi hoạt động thì có hai loại Hook:

* Hook toàn cục (có phạm vi ảnh hưởng tới toàn hệ thống).
* Hook cục bộ (chỉ có tác dụng trên ứng dụng được cài Hook).

Cơ chế Hook của Drupal:

Trong Drupal các Hook được định nghĩa trong nhân của Drupal (có thể phát triển thêm các Hook mới), chúng được xem như là các sự kiện (event) và được gọi chung là các hàm callbacks. Các module dùng các Hook để tương tác với nhân Drupal mà không cần phải chỉnh sửa trực tiếp trong nhân.

Hook trong Drupal có dạng như sau: hook_user() -> mymodule_user() trong đó mymodule là tên module còn user là tên hook.

Ví dụ:

Khi user đăng nhập vào hệ thống Drupal, Drupal phát sinh ra hook_user(), có nghĩa là tất cả các module có dùng tới hàm hook_user() sẽ được gọi.

Các loại Hook trong Drupal:

Trong Drupal có nhiều loại Hook, mỗi Hook thực hiện nhiệm vụ khác nhau, các bạn có thể xem chi tiết về hook tại http://api.drupal.org/api/group/hooks/6.

Hook trong Drupal

1.Giới thiệu

1.1 Mục tiêu bài viết

Bài viết này nhằm giới thiệu cơ chế hoạt động của hooks trong drupal từ đó rút ra phương pháp định nghĩa một hooks trong drupal.

1.2 Khái niệm hook trong drupal

Hook trong drupal cũng giống như trong các ứng dụng khác, nó là 1 cơ chế cho phép chúng ta (các developer) tương tác vào một quá trình xử lý khác mà chúng ta không có quyền sửa đổi quá trình xử lý đó bằng cách sửa code.

1.3 Ý nghĩa về hook trong drupal

  • Nguyên tắc trong drupal là khi ta viết một module mà muốn "sửa" module đã có trước đó thì không được phép "hack code" của module đó, nhưng đôi khi chúng ta lại có nhu cầu sửa đổi module khác. Hook ra đời cho phép chúng ta thực hiện điều này.
  • Ví dụ khi ta viết module có chức năng notify cho user khi có 1 sự thay đổi trên nội dung của 1 node, mà không phải sửa code trong module node. Lúc này module node cho phép chúng ta tương tác với quá trình xử lý của nó thông qua hook mà nó cung cấp (hook_node_update).

2. Các cách gọi thực thi 1 hook trong drupal

  • Nhìn tổng quan về mặt kỹ thuật thì kỹ thuật gọi một hàm hooks trong drupal đi qua hai bước cơ bản:
    • Bước 1: Xác định danh sách các module có hàm implements hooks xác định.
    • Bước 2: Gọi thực thi các hàm xác định được.

2.1 Với bước 1 chúng ta có 2 cách:

  • Cách 1: Sử dụng hàm get_function_defined().
    • Lấy danh sách các hàm được khai báo trong drupal lên.
    • Lấy danh sách các hàm do user khai báo.
    • Sử dụng regular expression để lấy danh sách các hàm theo mẫu xác định.
  • Cách 2: Kiểm tra danh sách các module định nghĩa hook
    • Lấy danh sách các module được bật lên (enable).
    • Ứng với mỗi module xác định tên hàm hooks theo mẫu: modulename_hookname (với module là tên modulename, hookname là tên hook)

2.2 Với bước 2 chúng ta có 2 cách:

  • Cách 1: Sử dụng các hàm call_function_array.
    • Phương pháp này ứng dụng khi gọi một hàm mà không biết danh sách các tham số của nó, và danh sách tham số khác.
  • Cách 2: Sử dụng phương pháp gọi tên hàm trực tiếp ($function($param1, $param2, $param3).
    • Phương pháp này được sử dụng khi gọi một hàm mà biết chắc chắn tham số của nó.
  • Về performance và phân tích ưu nhược điểm của 2 phương pháp trên xem thêm tại:http://www.garfieldtech.com/blog/magic-benchmarks.

3. hook_hook_info

3.1 Giới thiệu

  • Bình thường các hooks sẽ được khai báo trong các file .install, .module, trong trường hợp chúng ta định nghĩa ra một hooks mới hoặc muốn chuyển các hook sang một file khác(khác với file .module, .install) để khai báo lúc đó chúng ta sẽ sử dụng hàm này để khai báo cho drupal biết hooks này được định nghĩa ở đâu.
  • Ngoài ra chúng ta còn có nhu cầu khi một số hooks ít khi được gọi, và nó khai báo nhiều (nhiều code), nếu chúng ta khai báo trong các file .module, .install thì sẽ không hợp lý, nhằm nhu cầu tăng performance cho ứng dụng drupal của drupal chúng nên khai báo các hàm implements hook này trong một file khác nhằm tăng tốc độ cho chương trình. (vì các hàm này ít khi sử dụng tới).

3.2 Ví dụ

<?php
function mymodule_hook_info() {
  $hooks['myhook'] = array(
    'group' => 'myhook',
  );
  return $hooks;
}
?>
- Từ nay trở về sau chúng ta có thể implement hook myhook trong module của chúng ta ở trong file .mymodule.inc trong module của chúng ta.

4. Kết luận:

  • Kỹ thuật định nghĩa hook
    • Định nghĩa ra một hooks mới dưới dạng format đặc biệt của drupal (viết sau)
    • Viết một hook để truyền 1 tham số xác định trong drupal. (viết sau)
    • Viết một hook có chức năng xử lý trong drupal.(viết sau)
    • Viết một hook với tham số truyền vào dưới dạng tham biến.(viết sau)

Thứ Hai, 5 tháng 8, 2013

Học Drupal

Để học Drupal đầu tiên bạn cần 1 trình quản lý web server và trình dịch ngôn ngữ PHP - đề cử cho việc này là dùng XAMPP.

Drupal là một khung sườn phát triển phần mềm hướng mô-đun (Framework), Opensource miễn phí. Cũng giống như các hệ thống quản trị nội dung hiện đại khác, Drupal cho phép người quản trị hệ thống tạo và tổ chức dữ liệu, tùy chỉnh cách trình bày, tự động hóa các tác vụ điều hành và quản lý hệ thống những. Drupal có cấu trúc lập trình rất tinh vi, dựa trên đó, hầu hết các tác vụ phức tạp có thể được giải quyết với rất ít đoạn mã được viết, thậm chí không cần. Đôi khi, Drupal cũng được gọi là "khung sườn phát triển ứng dụng web", vì kiến trúc thông minh và uyển chuyển của nó.

Drupal được chạy trên rất nhiều môi trường khác nhau, bao gồm Windows, Mac OS X, Linux, FreeBSD, OpenBSD và các môi trường hỗ trợ máy phục vụ web Apache (phiên bản 1.3+) hoặc IIS (phiên bản 5+) có hỗ trợ ngôn ngữ PHP (phiên bản 4.3.3+). Drupal kết nối với cơ sở dữ liệu MySQL hoặc PostgreSQL để lưu nội dung và các thiết lập.
Lịch sử

Đầu tiên, nó được Dries Buytaert, một lập trình viên mã nguồn mở, tạo ra theo dạng một hệ thống bảng tin. Đến năm 2001, Drupal trở thành một công trình nguồn mở. Drupal, trong tiếng Anh, được chuyển ngữ từ từ liệu "druppel" của tiếng Hà Lan, nghĩa là "giọt nước".

Từ tháng bảy 2007 đến tháng sáu năm 2008, mã nguồn Drupal đã được tải về từ website drupal.org hơn 1,4 triệu lần. Hiện nay, có một cộng đồng rộng lớn đang giúp đỡ phát triển Drupal.

Tháng giêng năm 2009, Drupal 6.9, phiên bản mới nhất, đã được công bố.
Nền tảng

    * PHP
    * MySQL
    * PostgreSQL
    * Apache
    * JQuery
    * XMLRPC
Ứng dụng

    * Website thảo luận, website cộng đồng
    * Website nội bộ (Intranet), website doanh nghiệp
    * Website cá nhân
    * Website thương mại điện tử
    * Thư mục tài nguyên
    * Hệ thống quản lý công trình phát triển phần mềm
    * Hệ thống quản lý quan hệ khách hàng
Đặc điểm chính

    * Hệ thống quản trị nội dung
    * PHP Framework
    * Blog
    * Môi trường cộng tác
    * Diễn đàn
    * Thư mục ảnh
Cài đặt Drupal
Drupal là mã nguồn mở quản trị nội dung, nhiều năm liền dành giải thưởng CMS open source được yêu thích nhất, do đông đảo người sử dụng trên thế giới bình chọn. So với Joomla, một CMS khá nổi tiếng và thông dụng hiện nay, Drupal được đánh giá là có tốc độ nhanh hơn đáng kể, và độ bảo mật đáng tin cậy. Sau đây tôi xin hướng dẫn các bước đơn giản để cài đặt 1 website sử dụng Drupal CMS
Trong ví dụ này, tôi sẽ hướng dẫn các bạn cài đặt Drupal trên nền Xampp Server
Bước đầu tiên là bạn download bộ cài đặt của Drupal tại website: http://drupal.org/
Hiện Drupal có 2 dòng phiên bản là 5.x và 6.x. Phiên bản 7.x đang được phát triển và hứa hẹn sẽ ra mắt trong 1 ngày gần đây.
Trong ví dụ này, tôi dùng phên bản 6.x
Sau khi download xong, bạn tiến hành giải nén thư mục của Drupal và trong thư mục gốc chứa các file chạy website của Xampp. Thông thường là thư mục E:/xampp/htdocs. Tên thư mục tùy chọn. Tôi đặt là drupalblog. Lưu ý có thể khi giải nén, các thư mục và file của Drupal được đặt trong thư mục nén có tên Drupal-6.x. Bạn hãy move nó ra thư mục chính là Drupalblog.
Bước tiếp theo là tạo Sql database cho Drupalblog
Bạn có thể sử dụng trình quản lý MySQL  là Phpmyadmin để tạo SQL. Đường dẫn của phpmyadmin thường là http://localhost/phpmyadmin/
Trong ô Creat new database, bạn hãy nhập tên bất kỳ SQL database bạn muốn khởi tạo. Ở đây tôi đặt tên là drupalblog

Sau đó nhấn vào nút Creat để khởi tạo Database này.
Bước tiếp theo là bạn vào thư mục E:\xampp\htdocs\drupalblog\sites\default
Copy file default.settings.php ra 1 file có tên là settings.php. File này sẽ ghi lại các thông số thiết lập trong quá trình cài đặt tiếp theo đây.
Tiếp theo truy cập vào đường dẫn http://localhost/drupalblog để tiến hành các bước cấu hình cho website Drupal. Màn hình giao diện có dạng như sau:

Click chọn Install Drupal in English để sang bước tiếp theo
Màn hình cài đặt có dạng như sau:
Bạn điền các thông số như hình trên. Với Database name là tên SQL database bạn đã tạo ở bước 2, Database username là tên truy cập vào Database Drupalblog. Ở đây do cài trên localhost, bạn có thể khai báo là root cho tiện, và không cần khai báo pass. Trong phần Advance option có các ô cho bạn lựa chọn. Nếu sử dụng 1 số shared host free, phần này là rất cần thiết. Vì Database host: của bạn sẽ không phải là localhost như mặc định, mà là IP, hoặc domain do shared host đó cung cấp. VD như có thể là sql.vinazoom.com, hay sql8383.byethost.com v..v. Phần Database port: là cổng cấp cho dịch vụ của Mysql. Mặc định là 3306 có thể không cần điền vào. Nếu bạn tự cấu hình cho service MySQL ở cổng khác thì điền số cộng vào. VD 1587 chẳng hạn. Phần Table prefix: là tiếp đầu ngữ các table của Drupal trong Database Drupalblog. Nếu bạn chỉ cài Drupal trên Database này thì có thể không cần điền. Nếu như bạn cài chung Database với các CMS hoặc Source khác như Joomla, VBB, v..v để có thể tiện cho việc dùng chung các tài khoản User cho Bridge sau này thì có thể điền giá trị là dru_. Nhấn Save and Continue để đến bước tiếp theo
Tiếp theo bạn chờ Script của Drupal ghi các dữ liệu mặc định lên Database(mất chừng vài giây). Sau đó phần cài đặ sẽ tự động đến với phần cấu hình các thông tin ban đầu của Site.
Ở phần này, bạn chỉ cần chú ý đến phần thông tin Username là tên tài khoản quản trị chính. Và phần password là mật khẩu của tài khoản quản trị chính. Các phần thông tin khác có thể điền tùy ý, và thay đổi dễ dàng trong phần quản trị Drupal sau này. Click vào nút Save and Continue để đến bước tiếp theo
Nếu quá trính cài đặt thành công, Drupal sẽ hiện lên dòng thông báo:

Drupal installation complete

Congratulations, Drupal has been successfully installed.
Có thể có lỗi nhỏ xảy ra như:
  • warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\xampp\htdocs\drupalblog\includes\mail.inc on line 193.
  • Unable to send e-mail. Please contact the site administrator if the problem persists.
Lỗi này là do bạn cài đặt trên localhost, không cấu hình chức năng gửi mail. Nên Drupal thông báo là không thể gửi mail đến tài khoản email quản trị bạn đã khai báo ở bước trước.
Tới đây, việc cài đặt đã hoàn thành và bạn vào địa chỉ http://localhost/drupalblog/ để tiến hành quản trị, và khám phá các chức năng tuyệt với của drupal
Chúc các bạn thành công

Đây là những ghi chép học tập của mình về drupal 7, giờ muốn chia sẻ với mọi người 
(tài liệu này mang tính chất cá nhân nhé)

 
Link Tải :
http://www.mediafire.com/?324hyo63yabeuu7  

Drupal - hiểu biết

Drupal 7 ra mắt trên toàn thế giới
Drupal đã phát triển thành một nền tảng được coi là mạnh mẽ nhất để  thiết kế website xã hội và ngữ nghĩa, đồng thời trở nên dễ sử dụng hơn bao giờ hết.
An Tâm Đức cùng với các bạn tìm hiểu thêm Drupal 7:
"Nền tảng Drupal 7 mới này cung cấp các trường API, lưu trữ và cache thay đổi, cho phép sử dụng Mongo như là giải pháp 'Không SQL' cho các ứng dụng chịu tải cao và có khả năng mở rộng. Bộ khung kiểm thử đơn vị mới đảm bảo phần lõi ổn định, đã được chứng minh qua những lần hợp nhất lõi hệ thống khi phát triển dự án của chúng tôi. Với lưu lượng sử dụng cực lớn và khả năng xuất bản tức thì, sẽ rất khó khăn thậm chí không thể phát triển được trên các phiên bản trước đây của Drupal" ông Jim Davidson, chủ tịch của một trang web nói.
Dự án phát triển Drupal 7 kết hợp giữa các chỉ dẫn của các chuyên gia công nghệ, cùng với phản hồi của cộng đồng, để làm cho việc sử dụng được dễ dàng hơn. Việc cải tiến cách thức sử dụng bao gồm quản lý dễ dàng hơn, quản lý các cập nhật, truy xuất và tạo nội dung.
Angie Byron (hay Webchick), người bảo trì phát triển lõi của Drupal 7 khẳng định:
 "Drupal 7 cải tiến giao diện người dùng, nâng cao truy xuất, quản lý hình ảnh tốt hơn, hỗ trợ các dữ liệu meta đa nội dung, an toàn bảo mật, khả năng mở rộng và nâng cao trao đổi cơ sở dữ liệu. Drupal 7 vượt qua 30 nghìn lượt kiểm tra để đảm bảo tính ổn đinh. Tóm lại, đây là một bước tiến to lớn cho Drupal và cho tất cả các nhà phát triển website, và chúng tôi rất hạnh phúc vì có thể chính thức giới thiệu Drupal 7 cho thế giới."

Drupal là phần mềm mã nguồn mở được sử dụng bởi hơn nửa tỉ người trên 200 quốc gia và 189 ngôn ngữ. Gần 1000 thành viên của cộng đồng Drupal đã và đang đóng góp trực tiếp phát triển lõi Drupal 7 và các module kèm theo.
"Drupal đã tăng trưởng như một hiện tượng từ phiên bản 6. Phiên bản 7 này tạo ra bước cải tiến lớn cho việc sử dụng, tốc độ và chức năng”, Dries Buytaert, nhà sáng lập và trưởng nhóm phát triển Drupal cho biết. “Chúng tôi mở ra một chương mới trong việc phát triển web, và cùng với mọi người trên thế giới đóng chào sự kiện ra mắt Drupal 7 vào ngày 7 tháng 1 năm 2011"

                                                                              

Những chức năng quan trọng mới của Drupal 7

  •     Cải tiến giao diện sử dụng đáp ứng nhu cầu của đa số 80% người sử dụng, cho phép thực hiện các công việc thường gặp dễ dáng hơn, các thiết lập mặc định thông minh, phân quyền cho người tạo nội dung và đơn giản hóa việc quản lý chung.
  •     Hỗ trợ trong lõi các chức năng hình ảnh như thay đổi kích cỡ, cắt ảnh.  Chức năng kiểm thử được xây dựng sẵn và tự động hóa cho mỗi bản vá giúp cho hệ thống ổn định lâu dài.
  •     Quản lý nâng cấp các phiên bản và chuyển đổi từ Drupal 6 sang Drupal 7.
  •     Tốc độ và khả năng mở rộng tốt hơn bằng công nghệ cache tiên tiến, mạng truyền dữ liệu (CDN) và sao chép dữ liệu master-slave. 
  •     Các trường tùy chỉnh trong lõi, các trường dữ liệu cho mọi loại    nội dung và cho cả người dùng, phân loại cùng với hỗ trợ và đa ngôn ngữ.
  •     Lớp cơ sở dữ liệu tóm tắt cho phép sử dụng nhiều loại CSDL như Maria, DB, Microsoft SQL, MongoDB, Oracle, MySQL, PostgresSQL hoặc SQLite.
      
    "Tại SubHub, chúng tôi giúp mọi người đạt lợi nhuận từ nội dung trực tuyến của họ. Một năm trước, chúng tôi quyết định bắt đầu với Drupal 7 để phát triển nền tảng quản lý nội dung thế hệ mới của chúng tôi", Jamie Wiseman, trưởng nhóm phát triển của SubHubLite tại Cardiff, Wales, Vương quốc Anh nói. "Khả năng linh hoạt của Drupal giúp chúng tôi xây dựng được hệ thống chúng tôi hằng mơ ước".
     Drupal nổi tiếng trên thế giới vì mở rộng hỗ trợ đa ngôn ngữ và hỗ trợ người tàn tật, như đã được chứng nhận tại Hà Lan là thích ứng 100% với Yêu cầu tiếp cận nội dung web (WCAG 2.0) của tổ chức World Wide Consortium (W3C)

     Hỗ trợ công nghệ web ngữ nghĩa đa nội dung (RDFa) trong lõi của Drupal Drupal 7 đang tiên phong trong việc đẩy mạnh chấp nhận RDFa (chuẩn về Khung miêu tả đa nội dung trong thuộc tính của W3C). Như chúng ta đã biết, Google và Bing phụ thuộc vào các dữ liệu tự động lấy từ các trang web khác.Thiết kế của Drupal 7 nhúng dữ liệu meta ngữ nghĩa vào lõi, giúp cho nội dung của các trang web ứng dụng Drupal 7 dễ dàng được các công cụ tìm kiếm lọc và phân tích. RDFa cung cấp thêm thông tin cho các công cụ tìm kiếm, những thông tin không hiển thị cho người dùng như là kinh độ và vĩ độ của một điểm trên bản đồ, hay cung cấp chuẩn thời gian chuẩn ISO cho từng địa phương và hiển thị kết quả tìm kiếm cho từng quốc gia.
    Theo Dries, nhà sáng lập Drupal, "giới thiệu công nghệ ngữ nghĩa vào lõi của Drupal sẽ là đóng góp lớn cho tương lai của web."

Về Hiệp hội Drupal

     Hiệp hội Drupal là tổ chức phi lợi nhuận hỗ trợ cộng đồng  Drupal bằng tài trợ, hạ tầng, tổ chức sự kiện, quảng cáo và phân phối. Được hỗ trợ bởi các thành viên cá nhân và tổ chức, Hiệp hội sử dụng các nguồn lực để giúp đẩy mạnh phát triển Drupal.

Tài liệu PHP và MySQL

Ngày nay, các WEBSITE tĩnh với các trang HTML đơn giản không còn đáp ứng được nhu cầu của người dùng. Các Website động kết hợp với cơ sở dữ liệu đã trở thành xu thế phát triển Web. Cuốn sách này sẽ giới thiệu với các bạn hai công nghệ phổ biến nhất được dùng để tạo các Website động: ngôn ngữ kịch bản PHP và chương trình quản lý cơ sở dữ liệu MySQL. Thông qua các bước thực hành được hướng dẫn cụ thể, các mã kịch bản rõ ràng với nhiều gợi ý chuyên môn, cuốn sách sẽ giúp bạn tìm hiểu tổng quát về công nghệ trước khi đề cập tới các vấn đề cụ thể như: an toàn, session và cookie, sử dụng các công cụ Web... Ở phần cuối cuốn sách, chúng ta sẽ áp dụng các kỹ thuật đã được giới thiệu để xây dựng hoàn chỉnh một số ứng dụng mẫu. 

Cuốn sách gồm 13 chương dạy thiết kế web 1 cách chi tiết, cụ thể, và có ví dụ sinh động.
-Tác giả: Nguyễn Trường Sinh (chủ biên) 
-Lê Minh Hoàng - Hoàng Đức Hải
-NXB Thống kê
+ Chương 1: Giới thiệu về PHP
+ Chương 2: Lập trình web với PHP
+ Chương 3: Tạo website động
+ Chương 4: Giới thiệu về SQL và MYSQL
+ Chương 5: SQL và MYSQL nâng cao
+ Chương 6: Sử dụng PHP và MYSQL
+ Chương 7: Cookie và Session
+ Chương 8: An toàn
+ Chương 9: Phát triển ứng dụng Web
+ Chương 10: Các chủ đề mở rộng
+ Chương 11: Ví dụ - Quản lý nội dung
+ Chương 12: Ví dụ - Đăng kí người dùng
+ Chương 13: Ví dụ - Thương mại điện tử
Phụ lục:
-Cài đặt
-Các ứng dụng nhóm thứ 3
-Tham khảo và nguồn tham khảo
link download : http://www.mediafire.com/?46j89x4ccelzddn

Thứ Sáu, 2 tháng 8, 2013

Tài liệu PHP căn bản - Khái niệm về hàm và gọi lại hàm trong PHP


Tài liệu PHP căn bản - Hàm và gọi hàm
Để giảm thời gian lặp lại 1 thao tác code nhiều lần, PHP hỗ trợ người lập trình việc tự định nghĩa cho mình những hàm có khả năng lặp lại nhiều lần trong website. Việc này cũng giúp cho người lập trình kiểm soát mã nguồn một cách mạch lạc. Đồng thời có thể tùy biến ở mọi trang. Mà không cần phải khởi tạo hay viết lại mã lệnh như HTML thuần.

1- Hàm tự định nghĩa:

Cú pháp:
?
1
2
3
4
5
6
7
function functiono_name()
{
//Lệnh thực thi
}
Tên hàm có thể là một tổ hợp bất kỳ những chứ cái, con số và dấu gạch dưới, nhưng phải bắt đầu từ chứ cái và dấu gạch dưới.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Ví dụ:
<?php
function name()
{
$name= array("Kenny", "Jiro", "Calvin", "Gillian");
foreach ($name as $test)
{ echo "$test<br>"; }
}
name();
?>

2- Hàm tự định nghĩa với các tham số:

Cú pháp:
?
1
2
3
4
5
6
7
function function_name($gt1,$gt2)
{
//Hành động
}
Ví dụ:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function indulieu($text)
{
echo "$text<br>";
}
indulieu("welcome");
indulieu("who are you ?");
?>

3- Hàm tự định nghĩa với giá trị trả về:

Cú pháp:
?
1
2
3
4
5
6
7
8
9
function function_name(Có hoặc không có đối số)
{
//Thuc thi
return giatri;
}
Ví dụ:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function tinhtong($a,$b)
{
$total=$a+$b;
return $total;
}
echo tinhtong(19,31)
?>

4-Gọi lại hàm trong PHP:

PHP cung cấp nhiều hàm cho phép triệu gọi lại file. Như hàm include(“URL đến file”), require(“URL Đến file”).
Ngoài hai cú pháp trên còn có include_once(), require_once(). Hai hàm này cũng có trách nhiệm gọi lại hàm. Những chúng sẽ chỉ gọi lại duy nhất 1 lần mà thôi.
Ví dụ:
Tạo file top.html với nội dung:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<html><head><title>Welcome to you</title></head>
<body>
<table border=1 width=700>
<tr><td colspan=5 align=center>Banner</td></tr>
<tr>
<td align=center> Home </td>
<td align=center> News </td>
<td align=center> Music </td>
<td align=center> Download</td>
<td align=center> Contact</td></tr>
Tạo file body.html với nội dung:
<tr><td colspan=5 align=center>
Noi dung website
</td>
</tr>
Tạo file bottom.html với nội dung:
<tr>
<td colspan=5 align=center> Copyright@ abc.com</td>
</tr>
</table>
</body>
</html>
Tạo trang index.php với nội dung:
<?php
include("top.html");
include("body.html");
include("bottom.html");
?>

Tổng kết:

Kết thúc bài học này, hẳn các bạn đã có những khái niệm cơ bản về hàm và cách sử dụng lại mã PHP. Trên ứng dụng thực tế việc dùng các hàm để triệu gọi đóng vai trò khá quan trọng, nó giúp mã nguồn của người sử dụng logic và dễ dàng chỉnh sửa hơn, việc ứng dụng nó trên website như thế nào cũng sẽ tùy biến hơn so với cách viết trực tiếp trên từng file.

Bài tập áp dụng:


1- 
Thiết kế website hoàn chỉnh bằng việc phân tách các file.
2- Xây dựng website với yêu cầu sau. Cho phép người sử dụng chọn mua số lượng hàng. Với giá tương ứng với từng mặt hàng. Sau đó xuất tổng tiền(đã bao gồm thuế VAT 10%)