- Học nghệ thuật đầu tư dựa trên giá trị.
- Kinh nghiệm đầu tư thành công.

Được tạo bởi Blogger.

Thứ Sáu, 16 tháng 10, 2015

Chủ Nhật, 24 tháng 5, 2015

Cấu hình cơ sở dữ liệu Database trong Magento



Mở file local.xml trong thư mục sau đây, rồi sửa lại code cho phù hợp với thông tin cơ sở dữ liệu mới.
/app/etc/local.xml

Bổ sung cấu hình cho phù hợp và sau đó Save.

<connection>
   <host><![CDATA[localhost]]></host>
   <username><![CDATA[database_username]]></username>
   <password><![CDATA[database_password]]></password>
   <dbname><![CDATA[database_name]]></dbname>
   <active>1</active>

Thứ Năm, 23 tháng 10, 2014

Magento - Cái nhìn tổng quan về Magento


Cấu trúc thượng tầng của Magento

Nền tảng xây dựng nên Magento




Cấu trúc MVC của Magento


Magento, cũng như nhiều nền tảng ứng dụng khác, được xây dựng trên một bộ khung phát triển phần mềm chuẩn. Bộ khung ấy là Zend Framework (ZF), một bộ khung nổi tiếng trong giới phát triển phần mềm mã nguồn mở PHP. Với nguyên lý lập trình hướng đối tượng và một nền móng vững chắc, bảo mật và có khả năng mở rộng cao, ZF giúp Magento được xây dựng nên với 3 điểm mấu chốt sau:

Tính linh hoạt: E-commerce là một lĩnh vực rộng lớn, yêu cầu cho mỗi ứng dụng thương mại điện tử do đó sẽ rất đa dạng. Magento cung cấp khả năng tuỳ biến liên tục để thích ứng với mọi yêu cầu của từng ứng dụng cụ thể.
Tính cập nhật: Bằng việc phân tách vùng lập trình thành 3 vùng core, community và local, Magento cho phép tuỳ biến dễ dàng mà không ảnh hưởng tới việc nâng cấp bộ mã nguồn của nó.
Tốc độ và bảo mật: Các nhà phát triển Magento tuân theo quy ước lập trình chuẩn theo các mô hình thực tiễn tốt nhất nên đảm bảo tối ưu hoá hiệu năng của phần mềm và cung cấp các cửa hàng trực tuyến với độ bảo mật cao.

Để theo kịp thời đại, Magento sử dụng nguyên lý Model-View-Controller (MVC) làm nguyên lý lập trình. Vì đây là một mô hình tương đối thân quen nên chắc chắn nhiều bạn sẽ thấy rất phấn khích và nghĩ rằng Magento dễ Nhưng mình có thể đảm bảo với các bạn rằng cấu trúc MVC của Magento sẽ khiến cho các bạn điên ngay khi các bạn thử làm một cái gì đó to tát hơn hiển thị Helloworld trên màn hình *cười nham hiểm*. Nếu như bạn mong rằng Magento sẽ có namespace như Symfony hay một số nền tảng khác thì bạn nhầm to vì Magento hiện thời không dùng namespace mà sử dụng một cách rất củ chuối để giả lập khả năng định danh các class.




Thực ra thì mô hình MVC cơ bản chỉ có thế này thôi

Cấu trúc cơ bản của Magento
Magento được cấu thành bởi nhiều thành phần được mô tả như sau:
Các khu vực thiết kế của Magento (Magento's design areas)

Adminhtml (Back-end)
Khu vực này chứa đựng mọi cơ chế quản lý gian hàng online của Magento. Đây là phần mà người mua hàng không thể nhìn thấy được mà chỉ có người bán hàng nhìn thấy. Sử dụng nó bạn có thể quản lý được doanh số, đơn đặt hàng, sản phẩm, danh mục sản phẩm, etc. và cài đặt các gói mở rộng cũng như thiết lập nhiều gian hàng cho cùng một website. Nếu bạn có một module hay một extension cho Magento, bạn có thể tạo ra cơ chế quản lý việc bật hay tắt và các thiết đặt khác của nó tại khu vực này.

Frontend (front-end)
Khu vực này chứa đựng tất cả những thứ liên quan tới trải nghiệm của khách hàng khi mua hàng trên gian hàng Magento của bạn. Các sản phẩm được trưng bày tại đây cũng như các tính năng đặt hàng, tạo hoá đơn và hiển thị hoa lá cành bắt mắt khác. Khi cài Magento vào lần đầu thì khu vực này đã hoàn toàn hoạt động bình thường như mọi website bán hàng trực tuyến khác. Tuy nhiên, chúng ta chắc chắn sẽ phải sờ mó vào nó nhiều nhất để tuỳ biến gian hàng theo ý muốn của mình.

Install
Đây là khu vực đặc biệt, bạn chỉ nhìn thấy nó đúng một lần khi mới cài Magento và bạn không cần sờ mó gì vào nó cả.

Vùng lập trình (Code pools)
Vùng lập trình của Magento được chia ra làm 3 phân vùng nhỏ, mỗi phân vùng đảm trách một vai trò riêng trong việc cấu thành bộ mã nguồn của nó
Vùng cốt lõi (Core): Vùng này chứa tất cả các chức năng thiết yếu tạo nên xương sống của Magento, nó là tập hợp các modules được viết hoặc được chứng nhận bởi đội ngũ lập trình của Magento. Bất cứ khi nào mở rộng hoặc tuỳ biến Magento, chúng ta đều cần phải tham khảo vùng này để hiểu được những gì Magento cung cấp, các thư viện cũng như các hàm có sẵn để chúng ta sử dụng. Magento không khuyến khích viết đè lên hay chỉnh sửa phần lõi này vì nó ảnh hưởng đến khả năng cập nhật của Magento và có thể gây ra các rắc rối không thể sửa chữa được. Trên thực tế, mình khuyến cáo các bạn KHÔNG BAO GIỜ được đụng tới vùng này ngoài việc xem (Cứ đụng vào đi rồi khóc ra đấy thì mình không chịu trách nhiệm đâu ).

Vùng bản địa (Local): Vùng này chứa tất cả các tuỳ biến và mở rộng Magento của người sử dụng. Nó được dựng nên chủ yếu để cho người dùng nghịch ngợm và phát triển những thứ của riêng họ dựa trên vùng lõi. Do đó nó hoàn toàn tách biệt với vùng lõi và không dính líu tới quá trình cập nhật của Magento khi có phiên bản mới. Có nhiều loại mở rộng khác nhau nhưng chúng đều nằm trong cùng một thư mục. Các phần mở rộng bản địa hoàn toàn hoạt động giống như phiên bản của chúng trong lõi, chỉ khác mỗi thư mục thôi. Đây là một cách rất hay để bạn lập trình mà không chạm vào lõi của Magento.

Vùng cộng đồng (Community): Vùng này dành cho các tuỳ biến và phần mở rộng Magento của cộng đồng phát triển Magento. Cũng như vùng bản địa, vùng cộng đồng này được phân tách ra để các nhà phát triển ứng dụng chuyên nghiệp sáng tạo ra các chức năng của riêng họ mà không gây ra xáo trộn gì trong lõi của Magento. Thú thực mình cũng chẳng hiểu tại sao phải cần có thêm vùng này và vùng này thì khác gì với vùng local nói ở trên vẫn là một câu hỏi khó. Nếu để ý, bạn sẽ thấy hầu hết các phần mở rộng toàn dùng vùng local thay vì community. Cứ coi đơn giản là chúng ta có nhiều sân chơi hơn để làm những thứ mà mình thích.

Gói mở rộng (Extensions)
Gói mở rộng được coi như một gói các tập mã lập trình cho phép mở rộng các chức năng của Magento. Thông thường, các gói mở rộng này phải tuân theo các quy định và điều khoản của Magento để đảm bảo chúng không can thiệp vào mã nguồn và các phần cốt lõi bên trong Magento, cũng như các tính năng mới mà chúng cung cấp không gây ảnh hưởng tới việc nâng cấp Magento.

Các gói mở rộng của Magento có thể được cài đặt bằng tay bằng Ctrl + C và Ctrl + V nếu bạn download mã nguồn của chúng về, hoặc cài đặt thông qua extension key do hệ thống Magento Connect cung cấp. Hầu hết các extension này phải mua, cũng có một lượng vừa đủ cho phép tải miễn phí. Nếu bạn nhìn vào giá của chúng trên hệ thống Magento Connect, bạn sẽ hiểu tại sao chúng ta nên học Magento

Modules
Một module là một gói mở rộng nhằm mở rộng cả tính năng lẫn đặc tính của Magento. Nếu bạn đã từng đọc qua về module của các loại phần mềm khác, bạn có thể dễ dàng hiểu nó là gì. Còn nếu bạn chưa thân thuộc lắm với nó thì có thể tưởng tượng ra một số ví dụ như: cho thêm một bước nữa vào quá trình đặt hàng, tích hợp một phương thức thanh toán mà Magento chưa hỗ trợ hay tạo hệ thống thưởng điểm cho khách hàng, etc. Bên trong một Module có các thành phần nhỏ, được phân vào các thư mục như sau:

Blocks
Blocks, gọi nôm na là các khối, là cách mà Magento phân biệt các mảng chức năng trong hệ thống và tạo ra phong cách quản lý kiểu module để quản lý các chức năng này cả về góc độ giao diện trực quan lẫn tính năng. Có 2 loại blocks và chúng phối hợp với nhau tạo ra giao diện trực quan mà bạn thấy trong Magento:

Structural blocks (Khối cấu trúc): 
Các khối này được tạo ra chỉ nhằm mục đích duy nhất là thiết đặt bố cục cho các trang. Ví dụ như khối header, khối body và khối footer tạo ra một trang có bố cục 3 phần chẳng hạn.
Content blocks (Khối nội dung): Là các khối chứa đựng nội dung nằm trong các khối cấu trúc ở trên. Chúng là đại diện cho từng đặc tính chức năng của trang và sử dụng template đã nói ở trên tạo ra đoạn mã HTML chèn vào khối cấu trúc cha của nó. Ví dụ cho khối nội dung các các khối mini cart, category list, product listing, etc.

Thực tế cho thấy rằng layout và các khối là các thành phần phức tạp và khó nuốt nhất khi bạn học Magento. Nó rất chặt chẽ nhưng chứa đựng đầy rẫy nguy cơ làm hỏng mọi thứ bạn làm chỉ với một chút bất cẩn nhỏ. Do đó việc hiểu cách thức hoạt động của block là cần thiết để giúp bạn thành thạo Magento (Chính mình cũng nhiều lúc điên đầu với mấy thằng này).

Helper
Tại đây bạn sẽ cho vào các helper class. Các hàm bạn định nghĩa trong helper có thể được gọi ở bất cứ chỗ nào. Do đó helper là nơi chứa các "công cụ" giúp quá trình lập trình của bạn trở nên dễ dàng hơn ở một khía cạnh nào đó (nếu không thì nó đã chả gọi là helper ).

Model
Tại đây bạn sẽ có thể tạo các Model mà bạn muốn theo phong cách MVC. Chỗ này còn là nơi mà một Model đặc biệt có tên là Observer cư ngụ. Nói nôm na thì nó là nơi bạn cho vào các chức năng xử lý sự kiện (kiểu như event listener) mà sau này mình sẽ nói nhiều hơn khi đi vào các trường hợp cụ thể.

controllers
Nếu bạn đã quen với MVC, bạn chắc chắn biết thư mục này dùng làm gì. Có điều là mình thấy hơi lạ khi nó sử dụng chữ 'c' nhỏ thay vì chữ 'C' to như nhiều nền tảng và bộ khung phát triển khác vẫn làm. Một kinh nghiệm mà mình biết được từ đồng nghiệp cho thấy các class nằm trong thư mục "controllers" sẽ cần phải cho thêm require_once([Tên_class_bạn_muốn_extend]) còn các class nằm trong thư mục "Controllers" thì không cần. Mình chưa rõ lắm có đúng không. Dù sao thì Magento cũng hỗ trợ cả hai cho nên cái nào thuận lợi nhất thì bạn dùng cái đó.

data
Ở đây bạn sẽ cho vào các dữ liệu cài đặt để khởi tạo module. Các dữ liệu này đương nhiên sẽ được lưu vào database. Ví dụ, khi bạn muốn tạo một trang CMS của riêng mình thì đây là nơi để bạn cho các dữ liệu khởi tạo vào.

sql
Cũng như trong thư mục "data", các dữ liệu trong thư mục này dùng để cài đặt khởi tạo module. Tuy nhiên nó không đi kèm nội dung mà thường chỉ gồm các câu lệnh SQL cơ bản để bạn khởi tạo cấu trúc các bảng trong cơ sở dữ liệu. Nói chung, vì thư mục này và "data" không khác nhau nhiều nên thường người ta chỉ sử dụng thư mục này cho cả việc khởi tạo data lẫn cấu trúc dữ liệu.

etc
Mọi thứ trong này chỉ là các file xml giúp bạn thiết đặt module của mình. Trong đó một file không thể thiếu là config.xml. Các vấn đề của thư mục này sẽ được nói rõ hơn ở các bài sau.

Interface
Là tập hợp các chủ đề giao diện xác định những thứ bạn nhìn thấy và các chức năng người dùng của cửa hàng Magento. Một interface có thể được đặt vào một trong số các cấp độ quản lý như website-level, store-level hoặc cả website-level lẫn store-level trong khu vực admin backend.

Themes
Một theme là tập hợp của các layout, template và các skin giao diện tạo ra môi trường trực quan mà người dùng nhìn thấy ở Magento. Bởi vì Magento có khả năng tải nhiều theme cùng một lúc nên nó phân biệt các theme thành 2 loại:
Theme mặc định: Mỗi giao diện (interface) đi kèm với một theme được gọi là 'default', cũng chính là theme mặc định của giao diện ấy. Mỗi lần bạn đặt một giao diện cho Magento, nó sẽ tự động tìm thằng theme mặc định này trước tiên. Vì thế, theme này phải luôn đảm bảo có đủ tất cả các layouts, templates và skins chuẩn để chạy được mọi trang trong Magento. Nó được xếp ở hàng thấp nhất trong hệ thống theme và cũng là cái quan trọng nhất.
Theme không mặc định: Với các theme không mặc định, bạn chỉ cần có một vài file nhất định tương ứng với một vài trang nhất định mà bạn muốn. Có bao nhiêu tuỳ ý bạn (vì đơn giản là những file thiếu Magento sẽ tự động tìm trong theme mặc định để hiển thị). Theme kiểu này được sử dụng để tạo ra các thay đổi có tính tạm thời, giúp bạn không phải tốn công làm lại toàn bộ giao diện mặc định với số lượng file khổng lồ. Bạn chỉ cần thay đổi một chút CSS, mấy cái JS vớ vẩn và vài cái HTML con con là giao diện của Magento sẽ ngầu hẳn lên!

Như đã viết ở trên, một theme có 3 thành phần chính bao gồm:
Layouts (Bố cục): 
Layouts là các file XML cơ bản định nghĩa cấu trúc và bố cục các khối (blocks) tại các trang khác nhau, nó cũng điều khiển các thông tin META và page encoding (ví dụ như các thông tin dành cho máy tìm kiếm, các thông tin về mã hoá trang dưới dạng Unicode hay ANSI). Các layouts này được bố trí tuỳ theo module với mỗi module có thể có layout riêng.
Templates: 
Template là các file có định dạng *.phtml sử dụng (X)HTML thuần và PHP để tạo ra logic hiển thị thông tin và đặc tính của trang.
Skins: 
Skin được cấu thành bởi CSS stylesheets, Javascript và hình ảnh. Nó được thiết đặt cho từng khối và khối là cái gì thì mình sẽ viết ngay bên dưới.

Để cụ thể hoá mọi thứ trong bài này, chúng ta hãy nhìn vào cấu trúc thư mục của Magento để làm rõ các điểm mà bạn còn băn khoăn. Do việc đào sâu hơn cách mà Magento load các module của nó và khởi tạo khá phức tạp và khó hiểu nên mình tạm thời bỏ qua. Ở các bài viết sau, các bạn sẽ dần làm quen và hiểu cách mà Magento xử lý những cái phức tạp này.



Cấu trúc thư mục của Magento, rất cần thiết và tóm lược hầu hết bài viết này








Code - Model class trong Magento


$headBlock->setTitle($title);
$product = $this->getProduct();
            $title = $product->getMetaTitle();
$currentCategory = Mage::registry('current_category');
setDescription(Mage::helper('core/string')

// if this is a product view page
            if (Mage::registry('product')) {
//Vòng loop foreach================
<?php foreach ($_filters as $_filter): ?>
    for every Item
<?php endforeach; ?>

<?php $subs = $obj->getCurrentCategory()->getAllChildren(true); ?> //getting ids of subcategories of current category

$_regularPrice = $product->getPrice();
        $_finalPrice = $product->getFinalPrice();

Mage::app()
Mage::helper('tax')
Mage::helper('core')

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToSelect('brand');
$collection->addAttributeToFilter();

$this->getSkinUrl('images/header/az_marker100.jpg')) will output:
http://yourwebsite.com/skin/frontend/default/MG03C20024/images/header/az_marker100.jpg


Products - Thêm thông tin mã hàng SKU vào trang product trong Magento


Mở file template cho trang products tại app/design/frontend/default/your-theme/template/catalog/product/view.phtml

Ngay sau đoạn code:
<div class="product-name">
<h1><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></h1>
</div>



Thêm code sau đây:
<?php echo $this->htmlEscape($_product->getSku()) ?>

hoặc:
<?php echo nl2br($_product->getSku()) ?>

Cấu hình trong Backend
Catalog > Attributes > Manage Attributes > [...search for sku...] > Frontend Properties > Visible on Product View Page on Front-end > Yes > Save