Xin chỉ giùm phần block

Events happening in the community are now at Drupal community events on www.drupal.org.
lehongduc87's picture

Xin chào mọi người. Mình đang tự nghiên cứu về drupal. Do chưa từng biết gì về drupal trước đó nên mình nghiên cứu luôn về drupal 7(đồng thời xem lun phần drupal 6 nếu 7 chưa có).
Mình gặp vấn đề sau nhờ những người đi trước chỉ giúp.

Mình tính tạo thử 1 module block, để có thể đặt ở bất cứ region nào. Trong block này sẽ có 1 form chứa 1 textfield Name và 1 nút Submit. Mình muốn làm sao để khi click vào submit thì textfield Name sẽ ẩn đi, đồng thời xuất hiện 1 câu "Hello" + giá trị trong Name, và chữ trên nút submit sẽ đổi thành Try again để khi click vào 1 lần nữa thì sẽ hiện lại mọi thứ như ban đầu.

Mình đã tạo được 2 file info và module. Nội dung file module như sau:

<?php
function example_block_block_info()
{
     
$blocks['example_block'] = array(
       
'info'             => t('Example Block'),
       
'cache'          => DRUPAL_NO_CACHE,
      );
      return
$blocks;
}

function
example_block_block_view($delta = '')
{
   
$block['subject'] = t('Example Block');
   
$block['content'] = drupal_get_form('example_block_form');
    return
$block;
}

function
example_block_form()
{
   
$form['#id'] = 'example_block_form';
   
$form['name'] = array(
       
'#type'     => 'textfield',
       
'#title'     => t('Your name'),
       
'#value'    => "Duc",
       
'#size'     => 30,
       
'#maxlength'=> 255,
      );
     
$form['submit'] = array(
       
'#type'     => 'submit',
       
'#value'     => t('Say'),
      );
      return
$form;
}

function
example_block_form_submit($form, &$form_state)
{
    if(
$form_state['input']['name'] == "" || $form_state['input']['name'] == null)
       
form_set_error('',t('Name is not null'));
    else
    {
      
//Xử lý code ẩn textfield và đổi tên button.
   
}
}
?>

Mình đã hiển thị được block có form và có thể set region cho nó. Tuy nhiên, khi click nút submit, mình không biết làm thế nào để đổi tên nút submit và ẩn textfield. Mình đã thử viết code sau:
$form['submit']['#value'] = "Try again";
nhưng không được. Dùng hook_form_alter thì không giống ý mình.
Mọi người vui lòng chỉ giúp mình hoặc cho mình tài liệu tham khảo về cách làm (hoặc làm bằng drupal 6 cũng được). Mình tìm trên mạng nhìu rồi nhưng không thấy hướng dẫn. Chỉ thấy hướng dẫn những cái khác.
Cám ơn.

Comments

Cái đó bạn cần làm ở phía

jcisio's picture

Cái đó bạn cần làm ở phía client (tìm hiểu thêm về jQuery).

Cám ơn bạn đã hướng dẫn.

lehongduc87's picture

Cám ơn bạn đã hướng dẫn. Nhưng mình muốn tìm hiểu xem drupal có làm được vậy không. Vì nếu dùng javascript thì mình cũng đã nghĩ tới rồi. Mình sẽ xem thêm phần jquery để hiểu thêm. Cám ơn bạn

Hic, vẫn chưa có ai chỉ giùm

lehongduc87's picture

Hic, vẫn chưa có ai chỉ giùm mình à. Mình tìm hiểu JQuery nhưng không hiểu lắm, mình chưa từng làm JQuery. Có ai giúp giùm không T_T

Thử đoạn code này coi sao

Shellingfox's picture

Tạo file example_block.js bỏ trong thư mục của bạn.

Ở file example_block.module của bạn thêm vào hook_init để tải file js:

<?php
function example_block_init() {
 
drupal_add_js(drupal_get_path('module', 'example_block') . '/example_block.js', 'module', 'header');
}
?>

Nội dung file example_module.js như sau:

(function ($) {
  Drupal.behaviors.exampleModule = function (context) {
    // Chặn sự kiện submit
    $('form#example_block_form').submit(function () {
      // Kiểm tra trạng thái của textfield, nếu đang ẩn thì cho hiện ra và ngược lại
      var textBox = $(this).children('input[type="text"]');
      if (textBox.is(':hidden')) {
        // Đang ẩn, hiện ra lại cho nhập liệu
        textBox.show().focus();
      } else {
        textBox.hide();
        // Hiện ra dòng chữ
        // ....
      }
      return false;
    });
  }
})(jQuery);

Bạn viết dựa theo ý tưởng trên. Tối rảnh mình sẽ coi lại cho bạn.

--
Best regards,
Sang, Lê Thanh

Tel: +84 988079498
Email: me[at]sanglt.com
WWW: www.sanglt.com

Cám ơn bạn rất nhiều

lehongduc87's picture

Cám ơn bạn rất nhiều về hướng dẫn trên. Mình đã hiểu thêm một cách sử dụng jquery. Tuy chưa rành nhưng mình sẽ cố gắng nghiên cứu thêm.
Mình vẫn còn thắc mắc về phần FormAPI, chẳng lẽ không có cách tương tác với các phần tử trong form sao? Cách submit form để xử lý dữ liệu thì mình đã biết. Nhưng để làm được như jquery, thì không được sao? Rất mong mọi người chỉ bảo để mình có thể hiểu tường tận được drupal.

Form API chỉ có một vài hiệu

jcisio's picture

Form API chỉ có một vài hiệu ứng tối thiểu, như collapse (cũng dùng jQuery), chứ không có những cái như bạn nói. Những cái D không có thì bạn viết thêm module bổ sung vào là xong thôi.

Cám ơn mọi người rất nhiều.

lehongduc87's picture

Cám ơn mọi người rất nhiều. Cuối cùng, mình cũng đã hiểu được vấn đề.
Riêng về Drupal 7, thực sự có rất nhiều thứ không thể chạy tốt được, như module và những thứ khác. Có lẽ còn do bản alpha nên chưa hoàn chỉnh lắm. Do vậy việc nghiên cứu thẳng luôn D7 sẽ khó khăn.
Cám ơn mọi người đã giúp đỡ

Shellingfox's picture

Những thứ không thể chạy tốt là gì hả bạn?

Mặc dù là bản alpha và không khuyến khích dùng cho production site nhưng hiện tại mình đã làm ít nhất là 2 dự án bằng Drupal 7 alpha và số lượng công việc để làm một chức năng tương đương so với Drupal 6 tiện hơn rất nhiều mà?

Ví dụ như cái yêu cầu của bạn thì ở Drupal7 hoàn toàn có thể dùng formAPI để giải quyết mà không phải tạo thêm file js và viết một dòng js nào hết đó.

--
Best regards,
Sang, Lê Thanh

Tel: +84 988079498
Email: me[at]sanglt.com
WWW: www.sanglt.com

Xin lỗi vì bây giờ mới reply

lehongduc87's picture

Xin lỗi vì bây giờ mới reply comment của bạn. Mạng nhà mình bị đứt cáp 3 ngày nên không vô diễn đàn đọc được T_T.
Mình thấy trên drupal 7 còn nhiều thiếu sót do còn là bản alpha, đa số là các module chưa hoàn thiện. Có lẽ do mình gà nên nhiều lỗi phát sinh lắm.
Do công việc yêu cầu nghiên cứu drupal 7 nên mình không thể làm website trên drupal 6 mà phải làm trên drupal 7 (cắm đầu nghiên cứu cái chưa hoàn thiện T_T).

Mình xin nói một số cái bị lỗi nha(có thể do mình gà không chừng nên làm lỗi, có gì góp ý giúp, đừng chửi nha ^^):
- Module Views 7x (chưa chính thức release): cài vào nó bị lỗi tùm lum, nhất là cài view7x trên bản alpha 4 -> mình không làm được nhiều thứ. Sẵn đây mình cũng hỏi cách làm homepage lun, mình nghiên cứu trên internet, đa số chỉ làm với view, có cách nào làm không cần nó không(Trên D7 nha, cám ơn rất nhiều)
- Theme developer (đã release): vậy mà chả hiểu sao, bấm vào nút theme info thì không hiện ra gì cả (đã test nó trên D6 thì chạy quá xá tốt) -> mình không thể biết chính xác nên dùng file tpl nào để overide lại giao diện cả. Ví dụ phần block: Mình vào database xem chi tiết 1 block, module, delta rồi mình tạo file block-module-delta.php.tpl để overide lại thì không có gì xảy ra (mình làm trên D6 ok).
... Còn nhiều cái lắm, đầu óc ngu quá, hiện tại chỉ nhớ 2 cái này, nếu nhớ nữa mình sẽ post tiếp.

Rất mong mọi người hướng dẫn giúp. Mình còn gà nhưng luôn cố gắng để thành pro drupal, vì vậy cần những người đi trước giúp đỡ

Đồng ý là do các module còn

Shellingfox's picture

Đồng ý là do các module còn đang phát triển vì lý do rất đơn giản là bản Drupal 7 chưa phát hành chính thức mà. Bạn đang đứng ở mặt chức năng, còn mình thì lại nói về kiến trúc.

Theo mình các yêu cầu đơn giản bạn nên cố gắng tự tìm hiểu và phát triển thì mới hiểu rõ cách vận hành của Drupal.
Về theme thì nên coi module, lợi thế của Drupal là các module được comment rất chi tiết và rõ ràng. Ví dụ bạn muốn overide lại theme của chức năng blog thì coi các hàm mà hook_theme của module blog định nghĩa là bạn sẽ biết phải thay thế file nào.

Mình cũng đang làm cái dự án trên Drupal 7, mặc dù là alpha nhưng mà chưa gặp phải lỗi nào nghiêm trọng. Đang chờ ra beta rồi upgrade lên.

--
Best regards,
Sang, Lê Thanh

Tel: +84 988079498
Email: me[at]sanglt.com
WWW: www.sanglt.com

Cách chèn html hoặc bài php trong bài viết

kim_anh_89's picture

các anh chị ơi cho em hỏi ? làm sao có thể chèn code php trong bài viết của drupal 7 được ah. em không hiểu cách sử dụng drupal 7 cho lắm. mong các anh chị giúp đở

Chèn PHP code vào bài viet Drupal 7

nguyentran's picture

Đầu tiên bạn vào phần permission để set permission trên text format ứng với người dùng bạn muốn set. ("Use the PHP code text format")
Vậy là bạn có thể chèn code vào node dc rồi. Bạn edit 1 node, chọn text format là "Php code".
Lưu ý bạn fai để code trong

<?php

?>
. Chúc bạn thành công.