5/12/2012

Sửa lỗi tiếng việt joomla 1.5

Không biết các bạn có để ý thấy là khi bật chức năng SEF (Search Engine Friendly URLs) của Joomla! thì tên liên kết trên thanh địa chỉ của trình duyệt hiển thị không đúng với tên bài viết, cụ thể là bị mất một số ký tự có dấu tiếng Việt.
 Thí dụ tên bài viết là:
Cách cài đặt nhiều hệ điều hành trên cùng một máy vi tính

Còn liên kết trên thanh địa chỉ là:
 http://buaxua.vn/the-news/46-cach-cai-t-nhiu-h-iu-hanh-tren-cung-mt-may-vi-tinh.html

Đây là do lỗi khi chuyển đổi từ tiếng Việt có dấu của Title sang tiếng Việt không dấu cho Title Alias trong Joomla! 1.5. Mà chức năng SEF của Joomla! lại lấy Title Alias để tạo liên kết cho nên tên của liên kết cũng không đúng luôn.

Cách khắc phục của một số bạn là tự sửa Title Alias này lại cho đúng, tuy nhiên điều này hơi mất công. Có một cách khác là làm cho Joomla! 1.5 tự động chuyển đúng từ tiếng Việt có dấu sang tiếng Việt không dấu.
Sau đây là cách sửa lỗi này:

Mở tập tin:
 /libraries/joomla/filter/filteroutput.php

Tìm dòng:
function stringURLSafe($string)
   {
      //remove any '-' from the string they will be used as concatonater
      $str = str_replace('-', ' ', $string);

      $lang =& JFactory::getLanguage();
      $str = $lang->transliterate($str);

      // remove any duplicate whitespace, and ensure all characters are alphanumeric
      $str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);

      // lowercase and trim
      $str = trim(strtolower($str));
      return $str;
   }

Xóa hết các dòng này đi và thay thế bằng:

  function stringURLSafe($string)
        {
      $trans = array(
      "đ"=>"d","ă"=>"a","â"=>"a","á"=>"a","à"=>"a",
      "ả"=>"a","ã"=>"a","ạ"=>"a",
      "ấ"=>"a","ầ"=>"a","ẩ"=>"a","ẫ"=>"a","ậ"=>"a",
      "ắ"=>"a","ằ"=>"a","ẳ"=>"a","ẵ"=>"a","ặ"=>"a",
      "é"=>"e","è"=>"e","ẻ"=>"e","ẽ"=>"e","ẹ"=>"e",
      "ế"=>"e","ề"=>"e","ể"=>"e","ễ"=>"e","ệ"=>"e",
      "í"=>"i","ì"=>"i","ỉ"=>"i","ĩ"=>"i","ị"=>"i",
      "ư"=>"u","ô"=>"o","ơ"=>"o","ê"=>"e",
      "Ư"=>"u","Ô"=>"o","Ơ"=>"o","Ê"=>"e",
      "ú"=>"u","ù"=>"u","ủ"=>"u","ũ"=>"u","ụ"=>"u",
      "ứ"=>"u","ừ"=>"u","ử"=>"u","ữ"=>"u","ự"=>"u",
      "ó"=>"o","ò"=>"o","ỏ"=>"o","õ"=>"o","ọ"=>"o",
      "ớ"=>"o","ờ"=>"o","ở"=>"o","ỡ"=>"o","ợ"=>"o",
      "ố"=>"o","ồ"=>"o","ổ"=>"o","ỗ"=>"o","ộ"=>"o",
      "ú"=>"u","ù"=>"u","ủ"=>"u","ũ"=>"u","ụ"=>"u",
      "ứ"=>"u","ừ"=>"u","ử"=>"u","ữ"=>"u","ự"=>"u",
      "ý"=>"y","ỳ"=>"y","ỷ"=>"y","ỹ"=>"y","ỵ"=>"y",
      "Ý"=>"Y","Ỳ"=>"Y","Ỷ"=>"Y","Ỹ"=>"Y","Ỵ"=>"Y",
      "Đ"=>"D","Ă"=>"A","Â"=>"A","Á"=>"A","À"=>"A",
      "Ả"=>"A","Ã"=>"A","Ạ"=>"A",
      "Ấ"=>"A","Ầ"=>"A","Ẩ"=>"A","Ẫ"=>"A","Ậ"=>"A",
      "Ắ"=>"A","Ằ"=>"A","Ẳ"=>"A","Ẵ"=>"A","Ặ"=>"A",
      "É"=>"E","È"=>"E","Ẻ"=>"E","Ẽ"=>"E","Ẹ"=>"E",
      "Ế"=>"E","Ề"=>"E","Ể"=>"E","Ễ"=>"E","Ệ"=>"E",
      "Í"=>"I","Ì"=>"I","Ỉ"=>"I","Ĩ"=>"I","Ị"=>"I",
      "Ư"=>"U","Ô"=>"O","Ơ"=>"O","Ê"=>"E",
      "Ư"=>"U","Ô"=>"O","Ơ"=>"O","Ê"=>"E",
      "Ú"=>"U","Ù"=>"U","Ủ"=>"U","Ũ"=>"U","Ụ"=>"U",
      "Ứ"=>"U","Ừ"=>"U","Ử"=>"U","Ữ"=>"U","Ự"=>"U",
      "Ó"=>"O","Ò"=>"O","Ỏ"=>"O","Õ"=>"O","Ọ"=>"O",
      "Ớ"=>"O","Ờ"=>"O","Ở"=>"O","Ỡ"=>"O","Ợ"=>"O",
      "Ố"=>"O","Ồ"=>"O","Ổ"=>"O","Ỗ"=>"O","Ộ"=>"O",
      "Ú"=>"U","Ù"=>"U","Ủ"=>"U","Ũ"=>"U","Ụ"=>"U",
      "Ứ"=>"U","Ừ"=>"U","Ử"=>"U","Ữ"=>"U","Ự"=>"U",);
      
        //remove any '-' from the string they will be used as concatonater
        $str = str_replace('-', ' ', $string);

      $str = strtr($str, $trans);
        $lang =& JFactory::getLanguage();
        $str = $lang->transliterate($str);

        // remove any duplicate whitespace, and ensure all characters are alphanumeric
        $str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);

                // lowercase and trim
                $str = trim(strtolower($str));
                return $str;
        }

Sau khi sửa xong thì save file này lại. Tuy nhiên việc sửa đổi này chỉ có hiệu lực đối với các bài viết từ nay về sau mà thôi, còn các bài viết trước vẫn còn bị lỗi. Bạn phải mở (Edit) bài viết ra và xóa hết toàn bộ ký tự trong ô Alias (nằm ngay phía dưới Title) và nhấn Save (hoặc Apply) các lỗi sẽ được tự động sửa.
 http://buaxua.vn/the-news/46-cach-cai-dat-nhieu-he-dieu-hanh-tren-cung-mot-may-vi-tinh.html
 Không còn lỗi mất chữ nữa!

SHARE THIS

Author:

Tôi là PHƯỚC kỹ sư công nghệ thông tin. chuyên thiết kế web và làm dịch vụ MMO.

0 comments: