11/08/2018, 22:05

[CakePHP] View : TextHelper

Tiếp tục loạt bài về View trong CakePHP , lần này chúng ta sẽ cùng tìm hiểu về một helper là TextHelper . Với những hàm mà helper này cung cấp, các bạn có thể làm cho những dòng text của mình hữu ích và thân thiện hơn khi hiển thị ra views. Các trường có thể dùng như các đường link, format các ...

Tiếp tục loạt bài về View trong CakePHP, lần này chúng ta sẽ cùng tìm hiểu về một helper là TextHelper. Với những hàm mà helper này cung cấp, các bạn có thể làm cho những dòng text của mình hữu ích và thân thiện hơn khi hiển thị ra views. Các trường có thể dùng như các đường link, format các đường dẫn URL, hightlight từ khóa nào đó, hoặc làm cho những chuỗi dài được ngắn họn hơn.

1) autoLinkEmails(string text,arraytext, array text,arrayoptions=array())

Nếu trong chuỗi text của bạn có chứa địa chỉ email và bạn muốn nó sẽ được tự động thành email link, tức khi click vào đó trình soạn thảo email được khởi động, sẵn sàng cho việc soạn thảo một email mới thì hàm này sẽ có ích cho bạn.

Hàm này nhận vào hai đối số là text_ : là chuỗi có chứa địa chỉ email trong nó, _options : là mảng thuộc tính html (nếu bạn quên có thể đọc lại HtmlHelper). Hãy xem ví dụ sau :

$text = 'Nếu bạn cần thêm thông tin về sản phẩm của chúng tôi ' .
        'hãy gửi mail cho chúng tôi tới địa chỉ sau : salesupport@abc.vn';
    $linkedText = $this->Text->autoLinkEmails($myText);
    // Output của bạn sẽ có dạng :
    Nếu bạn cần thêm thông tin về sản phẩm của chúng tôi hãy gửi mail cho chúng tôi tới địa chỉ sau : [salesupport@abc.vn](mailto:salesupport@abc.vn)

Hàm này từ phiên bản 2.1 sẽ tự động escape nội dung text đầu vào. Nếu bạn cảm thấy không cần thiết có thể dùng lựa chọn escape => false để bỏ xử lý này.

2) autoLinkUrls(string text,arraytext, array text,arrayhtmlOptions=array())

Hàm này tương tự như autoLinkEmails() chỉ khác là nó sẽ tìm những chuỗi nào bắt đầu bằng https, http, ftp, hay nntp để tự động tạo link cho các URL.

3) autoLink(string text,arraytext, array text,arrayhtmlOptions=array())

Đây là hàm bao gồm ý nghĩa của cả 2 hàm ở trên, nó tạo được link cho email lẫn cả URL.

4) autoParagraph(string $$ext)

Trong ứng dụng của bạn chắc hẳn sẽ có những chỗ dùng đến textarea, nội dung nhập vào đó sẽ khá dài và bạn muốn format nó. Lúc này, hàm autoParagraph() sẽ giúp bạn tìm những chỗ xuống dòng rồi tự sinh thẻ
, format các đoạn văn bản bằng cặp thẻ . Cùng xem ví dụ dưới đây :

    $text = 'Đây là dòng đầu và xuống dòng đến
    dòng thứ hai ở đây.
   dòng thứ ba và cùng là cuối cùng.';
    $formattedText = $this->Text->autoParagraph($myText);
    // Bạn sẽ có được output
    <p>Đây là dòng đầu và xuống dòng đến<br />
    dòng thứ hai ở đây.</p>
    <p>dòng thứ ba và cùng là cuối cùng.</p>
Có một chú ý nhỏ là hàm này được thêm vào từ phiên bản 2.4 nên muốn sử dụng bạn cần lưu ý điều này.

5) highlight(string haystack,stringhaystack, string haystack,stringneedle, array $$ptions = array())

Hàm này sẽ thực hiện highlight chuỗi needle_ có trong _haystack và sử dụng mảng $$ptions để chỉ rõ 'format' cho chuỗi đó, đồng thời có thể bỏ qua các thể HTML để chỉ highlight đúng text bạn cần bằng cách set 'html' => true. Bạn hãy xem đoạn code sau :

    echo $this->Text->highlight(
        $textToSearch,
        'highlighted',
        array('format' => '<span class="xxx">1</span>'
             ,'html' => false)
    );
    // Bạn sẽ nhận được output có dạng
    I will be <span class="xxx">highlighted</span>.

5) truncate(string text,inttext, int text,intlength=100, array $$ptions)

Nếu như text_ truyền vào dài hơn giá trị của _length thì hàm này sẽ thực hiện vứt bỏ phần phía sau, thay vào đó là chuỗi tượng trưng cho phần bị giản lược đó, nếu như được khai báo. Mặc định mảng $$ptions có 3 tham số set như sau :

    array(
        'ellipsis' => '...',
        'exact' => true,
        'html' => false
    )

Nếu như 'exact' mà false thì việc vứt bỏ sẽ là từ khoảng trống đầu tiên trước vị trí lenght_, nên chuỗi output có thể không dài bằng _length. Và nếu 'html' là true thì các thẻ HTML sẽ không bị vứt bỏ.

    echo $this->Text->truncate(
        'Phần phía sau sẽ bị vứt bỏ.',
        20,
        array(
            'ellipsis' => '...',
            'exact' => false
        )
    );
    // output (chú ý là tổng độ dài $lenght bao gồm cả phần 'ellipsis')
    Phần phía sau sẽ...
Một chú ý nhỏ là tham số 'ellipsis' thay thế cho 'ending' từ 2.3

6) tail(string text,inttext, int text,intlength=100, array $$ptions)

Hàm tail() cũng được thêm vào từ version 2.3, nó có nghĩa ngược lại với hàm truncate() bên trên, nó sẽ lấy phần phía sau và bỏ đi phần trước đó. Output của hàm này như sau :...đây là phần tail (đuôi), phần trước đã bị lược bỏ.

7) excerpt(string haystack,stringhaystack, string haystack,stringneedle, integer radius=100,stringradius=100, string radius=100,stringellipsis="...")

Đây có thể coi là sự kết hợp của tail()truncate(), bởi vì nó sẽ trích ra một đoạn chuỗi có trong haystack_ xung quanh chuỗi _needle với một lượng kí tự là radius_ (lấy cả 2 bên _needle). Cách sử dụng cũng rất đơn giản :

    echo $this->Text->excerpt($myText, 'trích xuất', 11, '...');
    // Output
    ...đã được trích xuất ra rồi,...

8) toList(array list,list, list,and='and')

Khi bạn đưa vào cho hàm này một mảng list_ thì nó sẽ tự tạo cho bạn mỗi list các item có trong mảng đó dạng chuỗi và được phân cách bằng dấu phẩy, và item cuối cùng sẽ được nối bằng _and với item trước đó, mặc định $$nd mang giá trị 'and'.

    $reports = array(
                  '0' => 'report 1'
                  '1' => 'report 1'
                  '2' => 'ba chấm'
                  '3' => 'report n');
    echo $this->Text->toList($reports, 'và');
    // cho ra output
    report 1, report 1, ba chấm và report n

Đến đây là kết thúc các hàm mà TextHelper cung cấp, hy vọng bài viết có ích với các bạn.

To be continued ...

0