• This is Slide 1 Title

    This is slide 1 description. Go to Edit HTML and replace these sentences with your own words.

  • This is Slide 2 Title

    This is slide 2 description. Go to Edit HTML and replace these sentences with your own words.

  • This is Slide 3 Title

    This is slide 3 description. Go to Edit HTML and replace these sentences with your own words.

Showing posts with label website. Show all posts
Showing posts with label website. Show all posts

Ngôn Ngữ Tiếng Việt Cho Virtuemart 2.0.x

Sau 1 thời gian chờ đợi thì bản ngôn ngữ tiếng Việt hóa cho VM 2.0.x đã có mặt, nhưng hiện tại project nay mới hoàn thiện được khoảng 90%, nếu khi sử dụng các bạn thấy chỗ nào tiếng Anh thì đừng thắc mắc mà hãy tự thân vận động nhé !
Ngôn Ngữ Tiếng Việt Cho Virtuemart 2.0.x
Ngôn Ngữ Tiếng Việt Cho Virtuemart 2.0.x
Để sử dụng được thì các bạn phải cài đặt gói gói tiếng Việt cho jl 2.5trước. Cách cài đặt thì cài theo kiểu nông dân đó là giải nén gói này ra, copy 2 thư mụcAdministrator và Language up đè vào root nhé.

Đây là tập tin ngôn ngữ tiếng Việt của VirtueMart 2.0.6 (Site, Frontpage) dùng cho Joomla! 2.5, đã được dịch từ lâu nhưng vẫn chưa có thời gian kiểm tra hết các chức năng. Nay post lên nhờ các bạn dùng thử và kiểm tra xem cần chỉnh sửa lại gì không, sau khi hoàn thiên sẽ đóng gói lại.

Các bạn tải tập tin dưới đây về rồi giải nén và copy tập tin "vi-VN.com_virtuemart.ini" vào thư mục "/language/vi-VN/" là được. Nhớ chọn ngôn ngữ tiếng Việt (nếu chưa chọn) làm mặc định cho phần trang web (Site).

Tải gói ngôn ngữ Tiếng Việt cho Virtuemart 2.x: ở đây

Các hàm hữu ích trong PHP mà bạn cần biết

1/ Hàm có bao nhiêu tham số cũng được
Bạn có thể đã biết trong PHP chúng ta có thể tạo hàm với các tham số có giá trị mặc định ban đầu . Nhưng có 1 phương pháp cho phép 1 hàm chấp nhận mọi tham số !
Các hàm hữu ích trong PHP mà bạn cần biết
Các hàm hữu ích trong PHP mà bạn cần biết
Ví dụ đầu tiên với hàm có tham số có giá trị mặc định :
PHP Code:
// Hàm có 2 tham số mặc định
function foo($arg1 = '', $arg2 = '') { echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; }
foo('hello','world');
/* Xuất  arg1: hello arg2: world */
foo();
/*  Xuất arg1: arg2: */ 

Bây giờ, hãy cùng xây dựng 1 hàm có thể truyền vào mọi tham số . func_get_args() sẽ giúp chúng ta làm điều đó : 
PHP Code:
// Tham số để rỗng nhé
function foo() {
            // returns an array of all passed arguments
               $args = func_get_args();
               foreach ($args as $k => $v) {echo "arg".($k+1).": $v\n";}
}

foo();
/* Không xuất gì cả */
foo('hello');
/* Xuất arg1: hello */

foo('hello', 'world', 'again');
/* Xuất arg1: hello arg2: world arg3: again */ 

2/ Sử dụng GLOB() để tìm files
Nhiều hàm trong PHP có tên dài và có tính mô tả chức năng của nó . Tuy nhiên, thật khó để nói hàm glob()có nhiệm vụ gì nếu chúng ta chưa từng sử dụng qua .
Thật ra, glob() có chức năng như hàm scandir() nhưng là 1 phiên bản cao cấp hơn ~~

PHP Code:
// Lấy hết tất cả các file đuôi .php
$files = glob('*.php');

print_r($files);
/* Xuất 
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/ 
Bên cạnh đó, chúng ta có thể lấy ra nhiều file :
PHP Code:
// Lấy tất cả file có đuôi .php và .txt
//GLOB_BRACE : ở trong {} sẽ dc hiểu là hoặc << hoặc php hoặc txt thì lấy ra
$files = glob('*.{php,txt}', GLOB_BRACE);

print_r($files);
/* Xuất
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/ 

File cũng có thể được lấy ra với đường dẫn : 
PHP Code:
$files = glob('../images/a*.jpg');
print_r($files);
/* Xuất 
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/ 

Còn nếu bạn muốn lấy đường dẫn đầy đủ, chỉ cần dùng realpath() : 
PHP Code:
$files = glob('../images/a*.jpg');
// sử dụng hàm đến mỗi phần tử mảng
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/ 
Tất nhiên các ví dụ ở trên bạn test sẽ cho ra kết quả khác, vì folder trong máy của tác giả hok giống với folder của bạn . Tùy cơ ứng biến nhé ^^

3/ Thông tin bộ nhớ được sử dụng
Nếu biết được thời gian chạy script, bạn sẽ tối ưu code tốt hơn !
PHP có 1 bộ xử lý bộ nhớ rất phức tạp . Sự sử dụng bộ nhớ của đoạn script có thể tăng, giảm trong khi nó nó chạy . Để lấy bộ nhớ hiện tại đang được sử dụng, chúng ta dùng memory_get_usage() , để lấy bộ nhớ maximum được sử dụng trong cả quá trình, dùng memory_get_peak_usage() :

PHP Code:
echo "Ban đầu: ".memory_get_usage()." bytes \n";
/* prints Ban đầu: 361400 bytes */

// Sử dụng bộ nhớ nào
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}

// Loại bỏ mảng
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}

echo "Cuối cùng : ".memory_get_usage()." bytes \n";
/* Xuất
Cuối cùng: 885912 bytes
*/

echo "Cao nhất: ".memory_get_peak_usage()." bytes \n";
/* Xuất
Cao nhất: 13687072 bytes
*/ 
4/Magic Constants
PHP cung cấp một số magic_constants hữu ích như :
lấy ra dòng hiện tại (__FILE__), lấy ra đường dẫn hiện tại (__FILE__), lấy ra thư mục (__DIR__), tên hàm(__FUNCTION__), tên lớp (__CLASS__), tên method ( __METHOD__) và namespace (__NAMESPACE__)

Chúng ta sẽ hok đi từng constant, mà chỉ giới thiệu 1 vài ví dụ hữu ích :
PHP Code:
// đây là đường dẫn tương đối
// Có thể bạn sẽ gặp lỗi nếu chạy script từ thư mục khác đấy nhé
require_once('config/database.php');

require_once(dirname(__FILE__) . '/config/database.php'); 
Bạn hãy chạy script trên, đừng tạo file database.php trong folder config nhé, để hiểu __FILE__ có nhiệm vụ gì, bạn cứ việc copy->paste-> chạy . Bạn sẽ thấy lỗi chưa ? 
Nếu thấy rồi, bạn đảo thứ tự của 2 dòng require_once() trên, bạn chạy lại và sẽ hiểu ^^

Lưu ý : nên sử dụng __FILE__ khi include script khác bạn nhé .
Sử dụng __LINE__ sẽ giúp chúng ta debug dễ hơn . Bạn có thể tìm ra số thứ tự của dòng :
PHP Code:
// some code
// ...
my_debug("some debug message", __LINE__);
/* Xuất
Line 4: some debug message
*/

// some more code
// ...
my_debug("another debug message", __LINE__);
/* Xuất
Line 11: another debug message
*/

function my_debug($msg, $line) {
echo "Line $line: $msg\n";
} 


5/ Tạo ID đặc biệt : 
Có 1 vài trường hợp chúng ta cần phải tạo ra những chuỗi đặc biệt ( không trùng lặp ), người ta thường dùngmd5() để làm điều này, nhưng md5() không thực sự sinh ra để làm điều đó !
PHP Code:
// generate unique string
echo md5(time() . mt_rand(1,1000000)); 
Có 1 hàm chuyên dùng để xử lý điều đó trong PHP tên là : uniqid() 
PHP Code:
// Tạo chuỗi đặc biệt
echo uniqid();
/* Xuất
4bd67c947233e
*/

// Tạo 1 chuỗi đặc biệt khác
echo uniqid();
/* Xuất
4bd67c9472340
*/ 
Có thể bạn đang thắc mắc rằng dù hàm tạo chuỗi đặc biệt nhưng có 1 số kí tự đâu tiên giống hệt nhau mỗi khi chạy ! Bởi vì việc tạo chuỗi này phụ thuộc vào thời gian server . 
Để giảm cơ hội chúng có thể y chang nhau, chúng ta thêm prefix vào :
PHP Code:
// với prefix
echo uniqid('foo_');
/* Xuất
foo_4bd67d6cd8b8f
*/

// với nhiều kí tự hơn
echo uniqid('',true);
/* Xuất
4bd67d6cd8b926.12135106
*/

// prefix và nhiều kí tự hơn
echo uniqid('bar_',true);
/* Xuất
bar_4bd67da367b650.43684647
*/ 
Hàm này sẽ tạo chuỗi với số kí tự ít hơn md5(), sẽ giúp bạn tiết kiệm thời gian hơn .
6/ Serialization
Bạn đã bao giờ lưu 1 biến phức tạp vào database hay file ? Bạn không cần phải có những giải pháp của mình để chuyển đổi mảng về dạng chuỗi rồi nạp vào, bởi vì PHP đã có vào hàm dùng với mục đích này !
Chúng ta sẽ tìm hiểu 2 hàm : serialize() và unserialize()
PHP Code:
// 1 mảng phức tạp
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);

// convert to a string
$string = serialize($myvar);

echo $string;
/* Xuất
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/

// Bạn có thể lấy lại mảng ban đầu
$newvar = unserialize($string);

print_r($newvar);
/* Xuất
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)

[3] => apple
)
*/ 
Tuy nhiên, từ khi JSON trở nên phổ biến, họ đã quyết định thêm sự hỗ trợ vào PHP5.2 . Bây giờ bạn có thể sử dụng json_encode() và json_decode() :
PHP Code:
// Mảng phức tạp
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);

// Chuyển đổi mảng thành string
$string = json_encode($myvar);

echo $string;
/* Xuất
["hello",42,[1,"two"],"apple"]
*/

// Lấy lại mảng ban đầu
$newvar = json_decode($string);

print_r($newvar);
/* Xuất
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)

[3] => apple
)
*/ 
Có vẻ 2 hàm này nhỏ gọn hơn nhỉ ^^ . Hơn thế nữa, chúng tương thích với javascript và 1 số ngôn ngữ khác . Tuy nhiên, cho những đối tượng phức tạp quá, có thể sẽ bị mất thông tin đấy !

7/ Nén chuỗi
Khi nói về sự nén, chúng ta cứ nghĩ là nến file zip !! Nhưng chúng ta hoàn toàn có thể nén 1 chuỗi phức tạp trong PHP .
Ở ví dụ sau đây, chúng ta sẽ dùng hàm gzcompress() và gzuncompress()
PHP Code:
$string =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit lacus quis ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massased turpis tempor luctus. Curabitur sed nibh eu elitmollis congue. Praesent ipsum diam, consectetur vitaeornare a, aliquam a nunc. In id magna pellentesquetellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollissed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisqueeu non enim. Ut malesuada lacus eu nulla bibendum id euismod urna sodales. ";

$compressed = gzcompress($string);

echo "Size ban đầu: ". strlen($string)."\n";
/* Xuất
Size ban đầu: 800
*/
echo "Size sau khi nén: ". strlen($compressed)."\n";
/* Xuất
Size sau khi nén: 418
*/
// Lấy lại chuỗi ban đầu
$original = gzuncompress($compressed); 
Chúng ta có thể tiết kiệm tới 50% tổng kích thước đấy ! Bên cạnh đó, 2 hàm gzencode() và gzdecode()cũng làm điều tương tự nhưng dùng thuật toán khác thôi .

8/ Đăng kí 1 hàm shutdown 
Với hàm register_shutdown_function(), chúng ta có thể làm 1 vài chuyện trước khi script ngừng chạy . 
Ví dụ đếm thời gian chạy script nè : 
PHP Code:
// Lấy thời gian bắt đầu chạy
$start_time = microtime(true);

// Code ở đây
// ...

// Xuất code đã chạy được bao lâu rồi 
echo "Thời gian chạy script : ".
(microtime(true) - $start_time).
" seconds."; 

Với cái nhìn đầu tiên, có thể bạn thấy thật tầm thường !! Đoạn code trên chỉ là thêm đoạn code tính thời gian ở cuối script . Tuy nhiên, nếu bạn gọi hàm exit() , đoạn code trên sẽ hok bao giờ chạy được . Thay vào đó, nó sẽ thông báo lỗi , hoặc là khi script bạn bị kết thúc bởi người dùng, bằng cách nhấn nút stop trên trình duyệt chẳng hạn !!! 

Khi bạn sử dụng register_shutdown_function(), đoạn code của bạn sẽ chạy bất kể nó bị ngừng đột xuất vì lí do gì !
PHP Code:
$start_time = microtime(true);

register_shutdown_function('my_shutdown');

// Code ở đây
// ...

function my_shutdown() {
global $start_time;

echo "Thời gian chạy script : ".
(microtime(true) - $start_time).
" seconds.";
} 

Box model trong CSS

Bất cứ phần tử nào được tạo ra trong html hay xhtml đều được bao bọc bởi một khối, trong css  mô hình hộp (box model) được sử dụng khi nói về thiết kế và tạo layout web.
Mô hình Box model bao gồm padding (vùng đệm), border (đường viền) và margin (canh lề). Mặc định thì tất cả các giá trị này đều bằng 0, do đó chỉ khi nào các thuộc tính này được khai báo thì ta mới nhìn thấy sự thay đổi của chúng.
Box model trong CSS
Box model trong CSS
Padding: là vùng nằm giữa nội dung và đường viền (border), nó tạo ra một khoảng trống giúp cho nội dung được trình bày rõ ràng hơn .
Các giá trị của padding: bao gồm padding-top; padding-right; padding-bottom; và padding-left.
Border: sẽ quy định độ dày, màu sắc và kiểu hiện thị cũng như kiểu của đường viền.
Các giá trị của border bao gồm: border-width; border-style và border-color, chúng ta luôn phải khai báo border-style, nếu không được khai báo thì nó sẽ có giá trị bằng 0, lúc đó các giá trị của border-with và border-color sẽ không được hiển thị.
dưới đây mình sẽ style một khối để cho các bạn hiểu về padding và border.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<style type="text/css">
    #box-model{
        width: 342px;
        height: 192px;
        padding: 15px;
        border:1px #069 solid;
        background:#ddd;
            }
</style>
<div id="box-model">Reference site about Lorem Ipsum,
    giving information on its origins, as well as a random Lipsum generator.
    Reference site about Lorem Ipsum,
    giving information on its origins, as well as a
    random Lipsum generator.Reference site about Lorem Ipsum,
    giving information on its origins, as well as a random Lipsum generator.
</div>
và kết quả như bên dưới.
Reference site about Lorem Ipsum,
giving information on its origins, as well as a random Lipsum generator.
Reference site about Lorem Ipsum, giving information on its origins,
as well as a random Lipsum generator.Reference site about Lorem Ipsum,
giving information on its origins, as well as a random Lipsum generator.
Margin: margin là phần nằm ngoài cùng trong mô hình Box model. Nó sẽ tạo ra khoảng các giữa các thành phần với nhau và được tính từ đường viền (border) của phần tử
Các giá trị của margin: bao gồm margin-top; margin-right; margin-bottom; và margin-left.
ví dụ trên chính là ví dụ về Box Model trong css, tất cả những gì của Box Model là Margin , Padding, Border, chỉ vậy thôi nhưng nó tạo nên layout của một trang web. Hãy thử làm theo ví dụ của mình với nhiều phần tử thể thực sự hiểu về Box Model nhé.