Thay đổi giá sản phẩm bằng plugin trong Magento 2

Thêm file di.xml

File di.xml có nội dung như sau

Thay đổi giá sản phẩm

Ta sẽ tạo file app/code/Laptrinhinfo/HelloWorld/Plugin/Product.php, trong class Product, phương thức afterGetPrice sẽ giúp bạn thay đổi giá của sản phẩm. Ở đây tôi sẽ cho phép mỗi sản phẩm có giá ban đầu + 100

Flush cache và test lại

Bước cuối cùng là bạn flush cache của Magento 2 và ra ngoài frontend xem giá sản phẩm đã thay đổi chưa nhé.

Tạo module hello world trong Magento 2

Hello World là 1 trong những đoạn code basic nhất mà bất kỳ ngôn ngữ nào mới học bạn đều gặp phải khi bắt đầu. Với bài viết này cũng không ngoại lệ, chúng ta sẽ tìm hiểu cách tạo 1 module cho Magento 2 với kết quả xuất ra trên browser là “Hello World”.

Module trong Magento là 1 folder chứa các thành phần như blocks, controllers, models, helper, etc …. Trong Magento 2, các module được đặt ở thư mục app/code, và cấu trúc mỗi module sẽ theo format sau app/code/<Vendor>/<ModuleName> (với <Vendor> là tên của công ty hay tổ chức, <ModuleName> là tên của module)

Tạo đường dẫn cho module mới

Trong bài viết này tôi sử dụng Laptrinhinfo là tên vendor và HelloWorld là tên của module. Do đó chúng ta sẽ tạo cấu trúc folder là app/code/Laptrinhinfo/HelloWorld.

Mô tả module bằng cách sử dụng file cấu hình module.xml

Tạo thư mục etc trong thư mục chứa module ở bước 1, thêm vào đó file module.xml (đường dẫn sẽ là app/code/Laptrinhinfo/HelloWorld/etc/module.xml) với nội dung bên dưới

Chúng ta đăng ký tên của module là Laptrinhinfo_HelloWorld và version của module là 1.0.0

Đăng ký module bởi file registration.php

Tất cả module của Magento 2 phải được đăng ký thông qua class ComponentRegistrar, dó đó chúng ta tiến hành tạo file app/code/Laptrinhinfo/HelloWorld/registration.php với nội dung sau

Bật/cho phép module hoạt động

Để xem toàn bộ danh sách module đang hoạt động cũng như đang bị tắt (vô hiệu), bạn có thể gõ lệnh sau tại đường dẫn cài dặt Magento 2

Do module HelloWorld mới khởi tạo và chưa được bật lên do đó sẽ xuất hiện dòng sau

Chúng ta sẽ bật/cho phép module này hoạt động bằng lệnh

Kết quả sau khi enable

Sau cùng bạn cần upgrade lại Magento 2

Bạn có thể kiểm tra xem module đã xuất hiện chưa trong admin tại Stores > Configuration > Advanced > Advanced

Tạo đường dẫn router cho module

Trong Magento 2, đường dẫn URL sẽ dựa theo format sau

Chúng ta sẽ tạo file router app/code/Laptrinhinfo/HelloWorld/etc/frontend/routes.xml để khi truy cập vào /helloworld/* ngoài frontend, module này sẽ được gọi ra

Đường dẫn tương ứng ngoài frontend sẽ là

Tạo controller và acion

Chúng ta sẽ tạo file app/code/Laptrinhinfo/HelloWorld/Controller/Index/Display.php với nội dung như sau

Sau khi bạn truy cập vào http://example.com/helloworld/index/display trên trình duyệt, kết quả hiện ra trên màn hình sẽ là ‘Hello World’

Cài đặt chứng chỉ SSL Let’s Encrypt cho Nginx trên Ubuntu 16.04

Let’s Encrypt là 1 chứng chỉ SSL miễn phí được tài trợ bởi rất nhiều tên tuổi lớn của làng công nghê trên thế giới như Mozzila, Cisco, OVH, Chrome, Facebook … Trong những năm gần đây, việc Chrome của Google ngày càng gia tăng thị phần web browser trên thế giới cũng như Google đã xem SSL là 1 trong những tiêu chí đánh giá website đã làm cho SSL trở thành 1 trong những yếu tố quan trọng mà các webmaster muốn áp dụng nó cho website của mình.

Trong bài viết này mình sẽ hướng dẫn cách cài đặt Let’s Encrypt SSL cho Nginx trên server chạy Ubuntu 16.04

Cài đặt Let’s Encrypt

Đầu tiên bạn cần update lại Ubuntu và cài đặt Let’s Encrypt rất dễ dàng với dòng lệnh sau

Tạo chứng chỉ Let’s Encrypt SSL

Tiến hành chỉnh sửa file cấu hình mặc định của Nginx bằng cách

Trong block “server” thêm vào block “location” với nội dung như sau

Nếu bạn muốn biết thư mục gốc (document root) của Nginx ở đâu thì có thể tham khảo giá trị root ngay trong file cấu hình. Nếu bạn chưa chỉnh sửa cấu hình ban đầu của Nginx, thì mặc định document root là /var/www/html

Lưu lại thay đổi trên file cấu hình của Nginx rồi kiểm tra xem file đó có bị lỗi cú pháp hay không bằng cách

Nếu không có lỗi gì, thì hãy khởi động lại Nginx

Chạy lệnh sau để tiến hành khởi tạo chứng chỉ SSL cho domain của bạn

*** /var/www/html là thư mục mà bạn muốn trỏ domain tới, và example.com là domain của bạn (bạn có thể tùy chỉnh những giá trị này cho phù hợp với thực tế)

Một màn hình hiện ra yêu cầu bạn nhập email của bạn

Tiếp đến bạn hãy đồng ý với điều khoản của Let’s Encrypt bằng cách chọn Agree

Nếu mọi thứ ok không có gì trục trặc thì sẽ trả về kết quả như sau

(còn tiếp … :D)

Tạo hệ thống đăng nhập cho user với Facebook và Laravel Socialite

Bạn sẽ học được gì qua bài viết này?

Trong bài này bạn sẽ biết được cách tạo hệ thống đăng nhập để xác thực user bằng cách sử dụng 1 mạng xã hội (như Facebook, Twitter, Gmail …) với Socialite – 1 package của Laravel.

Cài đặt Socialite

Với các PHP Framework khác thì việc xây dựng hệ thống đăng nhập thông qua bên thứ 3 khá phức tạp và có ít tài liệu hướng dẫn, tuy nhiên đối với Laravel thì lại vô cùng dễ dàng. Hiện tại, Socialite hỗ trợ đăng nhập qua các mạng xã hội Facebook, Github, Google, Twitter và Bitbucket. Nếu bạn muốn sử dụng Socialite với các mạng xã hội khác (như Youtube, WordPress …) thì bạn có thể tham khảo Socialite Providers

Tuy đã được giới thiệu trong documentation của Laravel phiên bản 5.4 tuy nhiên Socialite mặc định vẫn chưa phải là core của Laravel. Do đó bạn cài đặt Socialite bằng composer

Hoặc bạn có thể thêm dòng bên dưới vào phần require của file composer.json rồi chạy lệnh composer update

Sau khi đã cài đặt Socialite bạn cấu hình lại file config/app.php => thêm dòng sau vào mảng providers

Tiếp tục bạn thêm 1 facade với tên Socialite vào mảng aliases

Ok, đến đây thì bạn đã có thể sẵn sàng sử dụng Socialite trong project Laravel của bạn rồi đấy!

Tạo Facebook app

Để có thể sử dụng Facebook như một hệ thống đăng nhập cho user thì bạn cần phải tạo 1 Facebook app. Đừng lo lắng, điều này cũng vô cùng dễ dàng! Đầu tiên bạn hãy đăng nhập vào account Facebook của bạn và truy cập vào https://developers.facebook.com

Phần Account Menu ở góc phải trên cùng bạn click vào Add a New App và chọn Website để tạo Facebook app

Điều vào tên app của bạn và bấm Create New Facebook App ID. Màn hình sẽ xuất hiện như bên dưới

Chọn category cho Facebook app của bạn rồi bấm Create App ID, sau đó bấm vào Skip Quick Start để vào phần Dashboard của app

Để có thể lấy được App Secret, bạn bấm vào nút Show rồi điền mật khẩu tài khoản Facebook của bạn.

Tạo Facebook test app

Nếu bạn đang muốn test chức năng Facebook login trên localhost, hãy bấm vào menu Test App tại phần Dashboard, điền vào đầy đủ thông tin rồi bấm Create Test App (như hình bên dưới)

Sau đó bạn vào Settings > Add Platforms > Website, điền vào domain website của bạn trên localhost vào 2 phần App DomainsSite URL, ví dụ cookbook.app (về việc set domain ảo trên localhost cho Apache bạn có thể tham khảo trên Internet)

Sau cùng hãy bấm vào Save Changes để lưu lại toàn bộ thay đổi. Và nhớ đừng quên 2 thông tin quan trọng nhất để bạn có thể sử dụng ở bước tiếp theo là App IDApp Secret

Cấu hình Facebook app trong Laravel project

Sau khi đã tạo xong 1 Facebook app, bạn có thể liên kết nó với Laravel bằng cách sửa file config/services.php

Hoặc bạn có thể sử dụng biến từ file .env

Lúc đó bạn có thể chỉnh lại file config/services.php như sau

Trong đó yourFacebookAppIDApp IDyourFacebookAppSecretApp Secrethttp://yourLaravelAppURL/login/facebook/callback là link trên website của bạn mà user sau khi đăng nhập Facebook app thành công sẽ được redirect tới.

Đến đây thì quá trình cài đặt và cấu hình Socialite cho Laravel đã hoàn tất! Bạn có thể tham khảo kỹ hơn documentation của Socialite trên Github tại đây https://github.com/laravel/socialite để hoàn tất hệ thống đăng nhập user của bạn.

Happy coding! 😀

Lập trình web bằng Ruby với Hanami framework

Nhắc đến ngôn ngữ Ruby, nhiều người sẽ nghĩ ngay đến Ruby On Rails – web framework nổi tiếng trên thế giới đang được các Ruby developers sử dụng hàng ngày. Trong khi đối với PHP, có quá nhiều sự lựa chọn framework để làm nên 1 website như Laravel, Phalcon, Zend Framework, CakePHP, Yii, Symfony … thì đối với Ruby có lẽ người ta chỉ biết đến Ruby On Rails 😀 Hôm nay để đổi gió tôi sẽ giới thiệu cho các bạn 1 Ruby web framework cũng khá tốt đó là Hanami 😀

Các bạn có thể tham khảo và đọc document của Hanami tại đây http://hanamirb.org/guides/

Để cài đặt Hanami thì vô cùng đơn giản, bạn chỉ cần gõ lệnh (À mà quên trước khi cài đặt Hanami bạn cần cài đặt Ruby nhé =)) , tôi sẽ không hướng dẫn chi tiết về vấn đề này)

Sau đó để tạo 1 web project với Hanami tôi dùng

với “bookshelf” là tên project của bạn, bạn có thể thay đổi tùy thích. Sau khi đã tạo xong project, bạn có thể thử tham quan cấu trúc của 1 project Hanami xem nó như thế nào

Trong đó tôi giải thích sơ về ý nghĩa 1 số file và folder trong này

Gemfile sẽ định nghĩa những Rubygems dependencies (sử dụng Bundler) => cái này đối với các ROR dev thì quá quen rồi nhỉ? 😀
Rakefile sẽ mô tả những Rake tasks
apps sẽ chứa 1 hay nhiều web applications, khi mới khởi tạo thì chỉ có 1 web app đó là web trong thư mục apps, bên trong mỗi web app như web sẽ chứa các thành phần như controllers, views, routes và templates.
config sẽ chứa những file cấu hình của project
config.ru là cấu hình dành cho Rack server
db sẽ chứa các giản đồ cho database (schema) và các migrations (những thay đổi về cấu trúc của database)
lib sẽ chứa các business logic code và các models, bao gồm entities và repositories
public sẽ chứa những file tĩnh cho web project như các file css, js, images …
spec để chứa những file tests

Vậy là xong phần giới thiệu về cấu trúc của Hanami, bây giờ chúng ta thử chạy nó xem mặt mũi nó ra sao nhé! 😀

Đối với các bạn đang xài Windows thì có thể sẽ bắt gặp lỗi sau khi chạy Hanami server “ERROR NotImplementedError: fork() function is unimplemented on this machine”. Các bạn có thể khắc phục bằng cách chạy lệnh

*** Tham khảo issue này của Hanami trên Github: https://github.com/hanami/hanami/issues/278

Ok, sau này đã chạy ngon ơ chúng ta sẽ kiểm tra bằng trình duyệt (web browser) xem như thế nào nhé. Bạn chỉ cần truy cập đến địa chỉ http://localhost:2300, nếu bạn thấy kết quả như hình bên dưới

thì xin chúc mừng bạn đã cài đặt Hanami thành công! 😀 Để tiếp tục với Hanami, bạn có thể đọc tiếp document của nó trên trang chủ, hy vọng Hanami là 1 sự lựa chọn không tồi để các Ruby developers sử dụng nó cho web project của mình

Một số kinh nghiệm xử lý text bằng Linux command

1/ Merge all to single file

2/Trích keyword chứa từ cụ thể Ex: “car”

3/ Lấy keyword có chứa từ “car” dài 4 kí tự trở lên

Cài đặt LAMP trên Ubuntu 16.04

LAMP là 1 web stack thông dụng bao gồm 4 thành phần Linux, Apache, MySQL & PHP để host các trang web. Trong bài viết này các bạn sẽ làm quen với việc cài đặt LAMP trên server Ubuntu 16.04

1/ Trước khi bắt đầu

Cập nhật lại Ubuntu server của bạn

2/ APACHE

a) Cài đặt và cấu hình Apache

Trước tiên bạn cần cài đặt Apache 2.4 từ Ubuntu repository

Sau đó bạn chỉnh file cấu hình của Apache /etc/apache2/apache2.conf, sửa cấu hình KeepAlive thành Off

Tiếp theo chỉnh lại cấu hình của module MPM của Apache tại /etc/apache2/mods-available/mpm_prefork.conf cho phù hợp với cấu hình server của bạn, tùy chỉnh bên dưới áp dụng cho server 2GB RAM (bước này bạn có thể bỏ qua cũng được)

Tắt module mpm_event sau đó bật module mpm_prefork

Sau đó bạn restart lại Apache để thay đổi có hiệu lực

b) Cấu hình Virtual Hosts

Bạn có thể cấu hình virtual hosts (trỏ domain) cho Apache bằng nhiều cách, tuy nhiên dưới đây là cách khuyên dùng. Những cấu hình dưới đây bạn hãy thay example.com thành domain của bạn.

Đầu tiên bạn hãy copy file cấu hình mặc định của Apache thành 1 file khác có tên dựa trên domain của bạn để dễ quản lý

Chỉnh sửa file example.com.conf vừa mới copy như nội dung bên dưới

Tạo 2 folders tương ứng cho site example.com

Tiếp theo bạn cần enable file virtual host mới vừa tạo để Apache có thể nhận được

*** Nếu muốn disable virtual host của 1 site, bạn có thể dùng lệnh sudo a2dissite example.com.conf

Bạn tắt luôn virtual host mặc định của Apache để bảo mật hơn

Sau cùng bạn reload lại Apache để mọi thay đổi ở trên có hiệu lực

3/ MYSQL

Cài đặt MySQL

Sau khi cài đặt bạn có thể login vào MySQL với quyền root

Sau khi login vào MySQL, nếu bạn muốn đổi mật khẩu của root bạn có thể làm theo cách sau (thay “password” bằng mật khẩu của bạn)

Để bảo mật hơn, bạn nên tạo 1 MySQL database mới và 1 MySQL user mới có quyền truy cập vào database đó. Ví dụ bên dưới là tạo database webdata, sau đó tạo 1 user webuser với mật khẩu là password có toàn quyền đối với database webdata (bạn có thể thay các giá trị như tên database, tên user và mật khẩu theo ý thích của bạn)

Sau khi mọi thứ đã xong, hãy thoát khỏi MySQL

4/ PHP 7.0

Cài đặt PHP 7 cùng các extension cần thiết để PHP tương tác được với Apache và MySQL

Một số extension của PHP bạn có thể cài đặt thêm nếu cần thiết (như cURL, JSON, CGI …)

Sau khi cài đặt PHP 7.0 bạn cần tùy chỉnh file /etc/php/7.0/apache2/php.ini để có hiệu suất tốt hơn cũng như dễ quản lý error log của PHP.

Tại log folder cho PHP và set quyền cho phép Apache được truy cập vào

Sau cùng bạn cần restart lại Apache để thay đổi có hiệu lực

5/ Test xem LAMP có hoạt động chưa

Đến bước này thì bạn đã cài đặt thành công LAMP trên Ubuntu 16.04, xin chúc mừng!

Tuy nhiên nếu bạn muốn kiểm tra mọi thứ xem có hoạt động đúng chưa, bạn có thể tiến hành bước test bằng cách tạo file /var/www/html/example.com/public_html/phptest.php

Dùng trình duyệt trên máy của bạn truy cập vào example.com/phptest.php, nếu hiện ra dòng ‘Connected successfully’ => điều này có nghĩa là việc cấu hình LAMP của bạn đã OK, không có gì sai sót.

 

5 nguồn học miễn phí VueJS

VueJS là 1 Javascript framework được phát triển nhằm mục đích xây dựng giao diện người dùng. Thư viện lõi của VueJS chỉ tập trung vào lớp view (lớp hiển thị), và có thể dễ dàng tích hợp chung với các thư viện JS khác hoặc có thể được áp dụng ngay vào dự án hiện tại. Ngoài ra, VueJS còn được sử dụng để xây dựng các ứng dụng Single Page (Single-Page application).

VueJS được hậu thuẫn mạnh mẽ bởi cộng đồng Laravel nên không khó để tìm hiểu VueJS thông qua các tutorial trên Internet. Dưới đây là tổng hợp 5 nguồn để học VueJS miễn phí và chất lượng.

1/ Learn Vue 2: Step By Step tại Laracasts

Video tutorial này do Jeffrey Way giảng dạy – tác giả của khóa học jQuery in 30 days. Khóa học này của ông được public miễn phí tại trang web Laracasts (trang web nổi tiếng dạy Laravel) và có thể được xem là “serie học VueJS chuyên sâu nhất” từ trước đến nay. Sau khi hoàn tất khóa học này, bạn sẽ nắm vững VueJS từ căn bản cho đến nâng cao.

2/ Vue.js Fundamentals tại Youtube

Khóa học là 1 playlist trên Youtube bao gồm 10 video của Devmarketer để bạn có thể bắt đầu từ những thứ căn bản nhất của VueJS 2 và chuyển sang những tutorial nâng cao hơn như xử lý API requests với Axios. Serie video này khá tuyệt dành cho những người mới làm quen với VueJS.

* vue-resource không còn nằm trong phần core (lõi) của VueJS và Axios là thư viện được khuyên dùng cho AJAX HTTP request.

3/ VueJS User Guide tại VueJS.org

Đừng ngạc nhiên bởi vì tutorial tại trang chủ của VueJS là một trong những tài liệu hàng đầu và rất đáng để đọc trước tiên. Có thể bạn sẽ bị cám dỗ bởi những video tutorial trên Internet nhưng thật sự là tài liệu tại trang chủ của VueJS rất hữu ích cho những người mới bắt đầu. Tài liệu API của VueJS cũng có sẵn tuy nhiên tôi nghĩ sẽ rất ít người có thể đọc (vì ngán và hơi khô khan)

4/ Develop Web Apps with Vue.js tại Egghead.io

Đây là 1 khóa học nhanh khoảng 10 video (tổng cộng khoảng 16 phút), không phải là khóa học tốt nhất để dành cho những người mới làm quen với VueJS hoặc với mô hình ViewModel. Tuy nhiên khóa học này cũng có tổng hợp những kịch bản VueJS thường gặp để bạn có thể tham khảo. Khuyến cáo bạn nên nắm vững căn bản trước khi học khóa này

5/ Getting Up and Running with the Vue.js 2.0 Framework tại Sitepoint

Cuối cùng là 1 tutorial nâng cao của VueJS, bao gồm quy trình tạo ra các components và đóng gói chúng với webpackvue-loader. Khóa học này giúp bạn tiến gần hơn đến việc tạo 1 ứng dựng VueJS mang tính chất thực tiễn có thể áp dụng vào project của bạn. Tuy nhiên bạn cần có nền tảng về ECMAScript 2015 (ES6) để có thể theo được khóa này (đặc biệt là modules và arrow functions). Nhưng không sao, bạn có thể tìm thấy những khóa học miễn phí về ES6 tại Laracasts hay Egghead dễ dàng. Quá tuyệt vời phải không?! 😀

Gửi email bằng Gmail và SendGrid trên Laravel 5

Laravel cung cấp cho chúng ta nhiều phương thức để gửi email. Bạn có thể sử dụng mail server trên host/vps/server của bạn để gửi mail, hoặc sử dụng các dịch vụ gửi mail bên ngoài như Mailgun, Sendgrid, Mandrill, Amazon SES, v.v…

Để gửi email trên Laravel, trước tiên hãy tùy chỉnh file config/mail.php

1/ Gửi email bằng Gmail

Đầu tiên bạn truy cập vào https://myaccount.google.com/security#connectedapps sau đó thiết lập tùy chỉnh tại Sign-in & security -> Connected apps & sites -> Allow less secure apps. Bạn chỉnh Allow less secure apps thành ON => điều này sẽ cho phép bạn sử dụng ứng dụng không phải của Google đăng nhập vào Gmail của bạn để gửi email.

Tiếp đến bạn cần chỉnh các thông số gửi mail tại file .env

Trong đó yourEmail là Gmail của bạn, và yourPassword là mật khẩu Gmail của bạn.

*** Nếu bạn gặp phải lỗi sau khi gửi mail “Failed to authenticate on SMTP server with username “youremail@gmail.com” using 3 possible authenticators” thì bạn hãy thử 1 trong các cách sau:

– Truy cập vào https://accounts.google.com/UnlockCaptcha và click vào continue and unlock your account for access through other media/sites
– Sử dụng mật khẩu với 2 dấu nháy kép “your password”
– Sử dụng Gmail username không có đuôi @gmail.com

2/ Gửi email bằng SendGrid

Đầu tiên bạn cần đăng ký 1 tài khoản tại https://sendgrid.com

Sau khi lấy được thông tin SMTP từ SendGrid, bạn tiến hành chỉnh sửa file .env

3/ Viết code để kiểm tra việc gửi email

Cuối cùng, bạn cần viết code gửi email để kiểm tra xem code của bạn đã hoạt động chính xác chưa. Để làm việc này, bạn thêm vào file routes.php đoạn sau

Như bạn thấy, chúng ta sử dụng method send của Mail facade với 3 tham số

– Tên của view mà chúng ta sẽ sử dụng để gửi mail
– Mảng $data để truyền biến vào view
– Closure function (hàm closure) để bạn tùy chỉnh các thông số như tiêu đề email, email gửi, email nhận …

Bạn cần tạo file views/emails/welcome.blade.php để Laravel sử dụng file này như nội dung của email

Sau cùng, bạn thử truy cập vào http://domain/sendemail để kiểm tra (trong đó domain là tên miền của bạn), nếu bạn thấy kết quả trả về trên trình duyệt là đoạn text “Gửi email thành công!!!” => điều đó nghĩa là bạn đã cấu hình email thành công, hoặc bạn có thể kiểm tra email được gửi đến để chắc chắn hơn.