Tạo shipping method (phương thức thanh toán) mới cho Magento 2

Mặc định, Magento 2 có sẵn một số shipping method như Free Shipping, Table Rates, Flat Rate. Nếu bạn muốn tạo 1 shipping method mới thì trong bài viết này tôi sẽ hướng dẫn các bạn cách để thực hiện.

– Đầu tiên bạn cần tạo 1 extension mới, ở đây tôi lấy ví dụ là Laptrinhinfo_Customshipping. Tiếp theo bạn tạo file cấu hình cho extension của bạn

app/code/Laptrinhinfo/Customshipping/etc/config.xml

– Tiếp tục bạn cần tạo file model được định nghĩa trong config.xml. File model này sẽ tính toán cho phí shipping cho website.

app/code/Laptrinhinfo/Customshipping/Model/Carrier.php

– Sau cùng để tạo những custom settings (cấu hình) cho shipping method mới của bạn (như Ship to Applicable Countries, Ship to Specific Countries … ), bạn cần phải tạo file system.xml để làm điều đó

app/code/Laptrinhinfo/Customshipping/etc/adminhtml/system.xml

 

Lấy tweets từ Twitter sử dụng Python Selenium

Selenium là công cụ khá quen thuộc được sử dụng trong việc test các sản phẩm web hoặc có thể làm công cụ để tự động hóa các thao tác trên website. Selenium hỗ trợ rất nhiều ngôn ngữ lập trình (như Java, C#, Python, Ruby, PHP, Perl, Javascript) cũng như hỗ trợ rất nhiều trình duyệt web (như Firefox, Opera, Chrome, Microsoft Edge, Safari …)

Trong bài viết này, chúng ta sẽ sử dụng Python Selenium để lấy các dữ liệu tweet từ trang web Twitter. Quy trình hoạt động của nó sẽ như sau:

– Mở trình duyệt web (ở đây tôi sử dụng Firefox) để vào trang Twitter search advanced
– Điền vào các tiêu chí để tìm kiếm tweet như: từ ngày, đến ngày, hashtag, …. (Bạn có thể tham khảo form tìm kiếm của Twitter tại đây => https://twitter.com/search-advanced)
– Submit form tìm kiếm, sau đó scroll màn hình web cho đến khi không còn tweet nào được load tiếp nữa.
– Bóc tách HTML từ trang web Twitter và lưu danh sách các tweets vào file .txt hoặc .html

Đoạn code dưới đây sẽ thực hiện các bước trên, do trong code đã comment khá kỹ nên tôi sẽ không giải thích thêm nữa. 😀  . Một số library Python quan trọng được sử dụng trong code là:

Lxml để bóc tách HTML
Selenium để điều khiển web browser từ Python

Hướng dẫn tìm tài liệu trên Google Drive

Hướng dẫn các bạn chưa biết tìm tài liệu và ebook trong KHO của GOOGLE một phương pháp kiếm bất cứ cái gì.
———————–
Bước 1: Vào google.com
Bước 2: seach và ô tìm kiếm từ khóa: site:drive.google.com + [tên tài liệu muốn tìm].
Ví dụ:
site:drive.google.com tieng anh
site:drive.google.com facebook maketing
……………………………………………………..
Chúc các bạn thành công.

Cách đẩy lệnh bị pending trong blockchain

1. Mở ví trong blockchain.info ra
2. Click vào chi tiết giao dịch
3. Trên đường dẫn url của giao dịch thêm vào đoạn text sau: ?format=hex
4. Chọn url và thêm đoạn text ở trên vào, nó sẽ convert giao dịch qua dạng mã hex
5. Copy hết đoạn mã hext đó
6. Mở web này ra: https://blockchain.info/pushtx, Rồi dán hết đoạn mã hex đã copy trong bước 5
7. Chọn lệnh submit transaction
Mục đích của lệnh này là: do mình send đi phí ít quá nên các miner bỏ qua, không chịu xác nhận. Lần lần nó trôi vào quá khứ. Lệnh này giúp phát thông tin lên toàn mạng lưới bitcoin lần nữa, nhắc các miner confirm

How to Rank a Website Without Using Backlinks

Numerous articles have been written on SEO and its practices, including the ones on BHW SEO strategies. However, it’s imperative that one has to understand every small detail surrounding the SEO strategy for making their website rank good.

We’ve all heard the Google’s drumbeat saying, marketers around the world should stop focusing on building links. It’s pretty much accepted that you should avoid manipulative link building to rank higher in search results. This is because external link isn’t important in Google’s ranking algorithms and link building can be safely ignored.

Here are a few ways that could help you get a good ranking for your website in the search results:

Ways to rank without backlinks:

There are several ways to rank a website without the use of backlinks. Here are a few popular SEO strategies without involving backlinks:

  • Focus on zero competition words: Sometimes, you might find certain keywords that are too weak to be found on a search result. Use such keywords along with their exact matching domains for optimizing your articles. This will surely put your website on Google’s front page. However, it‘s rare to find such weak keywords that have zero competition in the world of SEO.
  • Use keywords with good search volume: When there is no weak keyword in your domain, the next best option is to look for a keyword that has a minimum of 500-1000 searches in a month. Once done, optimize for this keyword and see where your website ranks on Google’s search page. One thing to note is the focus shifts from competition to volume.
  • Come up with unbelievable content: There are a lot of websites on the internet with impeccable content and SEO friendly articles. However, these sites often don’t feature in the top of a Google search result. But, you also need to know that creating exemplary content is not something that can be done on a daily basis, especially when the goal is to rank the website without using backlinks.
  • Ancient domains bring in more traffic: Are ancient domains still a good thing, or just something of the past? The answer is yes! Ancient domains continue to gain traffic till this day. In case you come across an old domain and use it further as a niche website, there’s a possibility of ranking high because you get more visitors.
  • Make use of country codes in domains: If you have a country code in your domain, it will definitely help your site rank well in that targeted country. This methods works extremely well for reaching out to a targeted geographical location.

A step-by-step guide to SEO without backlinks:

All the above mentioned ways have been combined to form a strategy that would essentially allow a website, or any website for that matter, to rank well without the use of backlinks. If you’re new to SEO, these steps might help you work your way through ranking your website:

  • Search for a keyword that gets at least 1k search volume for a month. This particular keyword can be used in your article. This volume is low enough to keep things from getting too competitive, but also ensures that you get significant traffic on the website.
  • The next step is to pick a domain that you have already registered, or go for one that has been abandoned and registered for a long time period of at least a year. Here, the strategy is to simply make the website rank without using any backlinks.
  • Next, create at least 20 high-quality articles, each of at least 500 – 1000 words, focused on comparatively similar keywords. The main goal here is to create some exceptional content, without going overboard on any other fronts.

You would probably need to follow these “Page On-Level Factors”:

  • Always remember, the title tag is a webpage’s second most important content, next to a keyword.
  • H1 tags are mostly “second title tags” that send another relevancy signal to Google.
  • Keyword density is something that helps Google to determine the topic of a web page. But, don’t go overboard because it might affect your websites safety.
  • Each image on the web page sends the search engines, like Google, important relevancy signals through their file name, alt text, title, description, and caption

Once you are familiar with all these ways and methods, you can start working your way through your own SEO and make your page rank well without any backlinks. Now it’s time for you to try out all these methods and make your website a star in Google’s eyes!

Danh sách các awesome list hữu ích cho lập trình viên

Awesome list là tập hợp các danh sách chuyên về 1 ngôn ngữ lập trình hay 1 framework, CMS nào đó giúp cho developer có thể tham khảo các user guide, tutorial, resources … 1 cách dễ dàng mà không cần phải tìm kiếm ở nhiều nguồn khác nhau

Dưới đây là danh sách các awesome list mà tôi đã chọn lọc và thấy hay (ưu tiên cho mảng web và ngôn ngữ PHP 😀 ). Danh sách này sẽ được thường xuyên cập nhật

*** (Updated) Đây là awesome list “ông nội” của các list bên dưới, không chỉ về lĩnh vực lập trình mà còn bao gồm cả về IT và computer nói chung => https://github.com/sindresorhus/awesome

1/ PHP (https://github.com/ziadoz/awesome-php)

– Framework

Laravel: https://github.com/chiraggude/awesome-laravel
Phalcon: https://github.com/sergeyklay/awesome-phalcon
CakePHP: https://github.com/FriendsOfCake/awesome-cakephp
Symfony: https://github.com/sitepoint/awesome-symfony
Yii: https://github.com/awesome-yii/list
Zend Framework:
Slim: https://github.com/xssc/awesome-slim
Lumen: https://github.com/unicodeveloper/awesome-lumen

– CMS

Magento: https://github.com/DavidLambauer/awesome-magento2
Wordpress: https://github.com/miziomon/awesome-wordpress
Drupal: https://github.com/mrsinguyen/awesome-drupal

2/ Javascript (https://github.com/sorrycc/awesome-javascript)

– Frontend (web)

Jquery: https://github.com/petk/awesome-jquery
ReactJS: https://github.com/enaqx/awesome-react
VueJS: https://github.com/vuejs/awesome-vue
AngularJS: https://github.com/AngularClass/awesome-angular

– Backend (web)

NodeJS: https://github.com/sindresorhus/awesome-nodejs
Meteor: https://github.com/Urigo/awesome-meteor

– Mobile

React Native: https://github.com/jondot/awesome-react-native
Ionic: https://github.com/candelibas/awesome-ionic2

3/ Python (https://github.com/vinta/awesome-python)

Django: https://github.com/rosarior/awesome-django
Flask: https://github.com/humiaozuzu/awesome-flask

4/ Ruby (https://github.com/markets/awesome-ruby)

Ruby On Rails: https://github.com/hothero/awesome-rails-gem

5/ Golang (https://github.com/avelino/awesome-go)

6/ API (https://github.com/abhishekbanthia/Public-APIs)

Firebase: https://github.com/afonsopacifer/awesome-firebase

Cài đặt Pestle – công cụ hỗ trợ phát triển module cho Magento 2

Pestle là 1 ứng dụng dòng lệnh (command line) của tác giả Alan Storm giúp các lập trình viên có thể generate code (tự động sinh ra các đoạn code) cho Magento 2.

Cài đặt Pestle

Trang Github của Pestle bạn có thể tham khảo tại link https://github.com/astorm/pestle, đầu tiên bạn cần clone Pestle về

Sau khi đã pull source code của Pestle về bạn di chuyển vào thư mục của Pestle và tiến hành cập nhật composer

Tiếp theo bạn tải file pestle.phar bằng lệnh sau

Để hiển thị danh sách các lệnh command line của Pestle bạn sử dụng

Để hiểu rõ chi tiết hơn về 1 lệnh nào đó, ví dụ generate_module, bạn có thể dùng lệnh sau

Sử dụng Pestle trong dự án Magento 2

Bạn có thể thêm đoạn sau vào file composer.json của thư mục chứa Magento 2 sau đó tiến hành update lại composer

 

Tạo controller trong Magento 2

Controller là 1 thành phần quan trọng khi phát triển module trên Magento 2, hoặc trên 1 PHP MVC Framework. Nó là nơi nhận các requests, xử lý và hiển thị kết quả lên website.

Trong Magento 2, 1 module có thể có nhiều controller trong thư mục Controller, các controller chứa các action trong class và method execute(). Magento 2 có 2 loại controller, đó là frontend controller (xử lý bên ngoài frontend) và backend controller (xử lý bên trong backend). Về cách thức hoạt động thì 2 controller này hoàn toàn giống nhau, chỉ khác nhau 1 chút đó là backend controller có kiểm tra phân quyền khi xử lý request.

Controller trong Magento 2 hoạt động ra sao?

Nhiệm vụ của controller là nhận request từ end-user (người dùng web hoặc từ command line của Magento). Dưới đây là đường dẫn URL thường thấy của 1 Magento 2 controller

Trong đó:

route_name là tên của route (và tên này là duy nhất không trùng lặp) được đặt trong routes.xml
controller là tên thư mục con nằm trong thư mục Controller
action là tên class với method execute để xử lý request.

Tạo controller trong Magento 2 như thế nào?

Để tạo controller, chúng ta cần tạo thư mục con trong thư mục Controller của module, sau đó tạo thêm 1 file action class trong thư mục con đó. Trong bài viết này, chúng ta sẽ tạo controller Test với action class là Hello cho module Laptrinhinfo_HelloWorld.

Bước 1: Tạo routes.xml

etc/frontend/routes.xml

Bước 2: Tạo file controller

Controller/Index/Index.php

Như bạn đã thấy, các file controller đều kế thừa class \Magento\Framework\App\Action\Action và sẽ gọi phương thức execute. Và chúng ta sẽ viết logic code trong đó trước khi trả lại kết quả.

Bước 3: Tạo file layout

view/frontend/layout/helloworld_index_index.xml

Bước 4: Tạo file template

view/frontend/templates/index/index.phtml

Bước 5: Flush cache 

Bước 6: Test lại

Bạn có thể kiểm tra xem controller đã hoạt động đúng chưa bằng cách truy cập vào

hoặc

Các phương thức (method) khác trên Magento 2 controller

Ngoài execute, class \Magento\Framework\App\Action\Action còn cung cấp cho chúng ta 2 phương thức khác cũng quan trọng không kém đó là _forward_redirect

Phương thức _forward

Phương thức sẽ chuyển phần xử lý cho 1 action class khác mà không làm thay đổi đường dẫn request URL. Ví dụ chúng ta có 2 action class là Forward và Hello với nội dung class Forward là

Khi chúng ta truy cập vào http://example.com/route_name/test/forward thì kết quả xử lý từ class Hello sẽ hiển thị trên trình duyệt. Ngoài tên action class, bạn có thể chỉ định tên controller, tên module, và tham số truyền thêm vào trong phương thức _forward. Dưới đây là source code của phương thức _forward trong Magento 2

Phương thức _redirect

Phương thức này sẽ chuyển hướng đường dẫn URL sang 1 action class khác, và đương nhiên kết quả trả về sẽ là của action class được điều hướng đến. Chúng ta có thể kiểm tra bằng cách thay phương thức _forward bằng _redirect

Kết quả là khi bạn truy cập vào http://example.com/route_name/test/forward , trình duyệt sẽ chuyển hướng bạn đến http://example.com/route_name/test/hello và hiển thị kết quả của action class Hello.