- vừa được xem lúc

Cách sử dụng Composer, Laravel Mix với Wordpress

0 0 32

Người đăng: Nguyễn Hữu Kim

Theo Viblo Asia

MÌnh code Laravel cũng khá lâu nên cũng quen với cách tổ chức code PHP theo dạng OOP, Namespace, autoload theo chuẩn PSR-4 và cài cắm thêm nhiều các packages/library qua Composer. Và mình cũng áp dụng nó khi viết theme cho Wordprress. Ngày hôm nay mình sẽ chia sẻ lại "bí kíp" này tới anh em cộng đồng Viblo.

Bạn sẽ biết thêm được những gì?

Qua bài viết này, một số thứ có thể hữu ích với các bạn như:

  • Các bạn có thể cài thêm các package bằng composer để dùng trong wordpress
  • Các bạn có thể biết cách tích hợp Laravel Mix vào trong wordpress theme
  • Tổ chức code của theme theo hướng OOP

Nếu bạn thấy hứng thú, hãy nhấn cho mình +1 upvote và cùng bắt đầu nhé! ❤️

Chuẩn bị

  • Composer đã được cài đặt
  • Node.js đã được cài đặt (để tích hợp thêm Laravel Mix)

Tích hợp Composer

Composer là công cụ giúp chúng ta quản lý dependencies (package/library) mà mình cài thêm cho project. Nó tương tự như Bundler của Ruby và NPM của Node.js. Bạn có thể tham khảo thêm về Composer qua bài viết của tác giả @thangtd90 tại đây: https://viblo.asia/p/tim-hieu-ve-composer-jlA7GKWGKZQ2.

  1. Để tích hợp Composer vào trong theme, bạn mở thư mục của theme viết, VD của mình:
cd wp-content/themes/webee
  1. Khởi tạo file composer.json với nội dung mẫu sau:
{ "name": "kimyvgy/demo-theme", "description": "My Wordpress theme integrated with Composer", "authors": [ { "name": "Nguyen Huu Kim", "email": "_@.com" } ], "require": {}
}

Hoặc nếu bạn cài một package luôn thì file composer.jsoncomposer.lock cũng sẽ tự động được tạo ra.

  1. Tích hợp composer vào theme, bạn thêm dòng include như sau vào trong theme bằng cách thêm vào file functions.php:
<?php require "vendor/autoload.php";

Sau khi thêm dòng này, bất kỳ package nào bạn cài đặt đều đã có thể sử dụng trong theme.

  1. Thử cài một package. Mình sẽ cài thử một package phục vụ việc debug thường dùng trong Laravel:
composer require -D symfony/var-dumper

Package này cung cấp các helper như: dd, dump để hiển thị thông tin về một biến lên website, nó cũng được higlight và format cho dễ nhìn.

 dd([ 'Hello' => [ 'message_1' => 'Viblo!', 'message_2' => 'World!', ] ]);

Và rồi xem kết quả:

Tổ chức code wordprss theo hướng OOP

Ở phần trên, chúng ta đã tích hợp composer thành công. Composer sẽ tự động load thêm các helper/class có trong library khi mà mình sử dụng tới trong project.

Ở phần này, chúng ta sẽ tạo theme theo hướng OOP.

  1. Khai báo autoload theo chuẩn PSR-4, để khi sử dụng namepace thay vì include theo từng file. Chúng ta sẽ thêm khai báo trong composer.json để composer thực hiện autoload tương tự như đối với package mà bạn cài thêm ở phần trên.
{ "name": "kimnguyen/webee", "description": "Wordpress classes", "authors": [ { "name": "Nguyen Huu Kim", "email": "_@.com" } ], "require": {}, "autoload": { "psr-4": { "Webee\\Theme\\": "classes/" } }, "require-dev": { "symfony/var-dumper": "^5.2" }
}

Với mẫu composer.json ở trên, tất cả các file class đặt trong thư mục classes sẽ được thực hiện autoload, tương ứng với namespace: Webee\Theme.

  1. MÌnh sẽ khởi tạo theme ngay sau dòng include autoload.php tại functions.php:
<?php require "vendor/autoload.php"; (new \Webee\Theme\ThemeManager)->init();
  1. Một mẫu ví dụ của method init():
class ThemeManager
{ public function init() { (new LaravelEloquent)->boot(); (new ToolBar)->setup(); (new Menu)->setup(); (new WidgetManager)->setup(); (new SearchPage)->setup(); // ... }
}

Nếu bạn thấy hay ho thì có thể thử xây dựng theme theo kiểu OOP dựa trên mẫu mà mình giới thiệu bên trên nhé.

Tích hợp Laravel Mix với Wordpress

Trong phần này, mình sẽ tích hợp Laravel Mix vào trong theme của mình. Đây là là package thường được dùng trong các dự án Laravel để build các file SCSS, JS theo ES6, Vue.js, React.js... mà trình duyệt không hiểu thành các file css thuần, các file js thuần (ES5) mà trình duyệt hiểu được.

Cách thức hoạt động

  1. Tương tự Laravel, mình sẽ tạo thư mục resources để chứa các file source: ES6, Vue.js, React.js, SASS, LESS... và dùng Laravel Mix xuất các file output ra thư mục assets.
  2. Trong quá trình phát triển, chạy lệnh yarn dev để tự động build JS/CSS.. mỗi khi file bị sửa đổi
  3. Load các file assets CSS/JS vào trong theme để website sẽ nhận style. Ví dụ như sau:
class ThemeManager
{ public function init() { // ... (new ThemeSupport)->setup() ->loadStyles('assets/styles/app.css') ->loadScripts('assets/scripts/app.js'); }
}

Cấu hình Laravel Mix

  1. Cài đặt các dependencies: laravel-mix, cross-env... VD mình có dùng file config mặc định của Laravel, có cài: Font-awesome, Bootstrap, SASS:
{ "scripts": { "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "npm run development -- --watch", "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "build": "npm run production", "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { "@fortawesome/fontawesome-free": "^5.10.1", "browser-sync": "^2.26.7", "browser-sync-webpack-plugin": "2.0.1", "cross-env": "^5.2.0", "laravel-mix": "^4.1.2", "resolve-url-loader": "3.1.0", "sass": "^1.22.10", "sass-loader": "7.*", "vue-template-compiler": "^2.6.10" }, "dependencies": { "animate.scss": "^0.0.6", "bootstrap": "^4.3.1", "lodash": "^4.17.15" }
} 
  1. Config Larave Mix, tạo file webpack.mix.js. Bạn có thể copy luôn file cấu hình đang có trong project Laravel hoặc làm theo mẫu sau:
let mix = require('laravel-mix'); mix.disableNotifications() .copyDirectory('resources/images', 'assets/images') .copyDirectory('resources/fonts', 'assets/fonts') .copyDirectory('node_modules/@fortawesome/fontawesome-free/webfonts', 'assets/webfonts'); mix.setPublicPath('assets') .js('resources/scripts/app.js', 'scripts') .sass('resources/styles/app.scss', 'styles') .options({ processCssUrls: false	}) .browserSync({ proxy: 'my-website.localhost', ui: false, files: [ './**/*.js', './**/*.scss', './**/*.php', ] }); 

Phần cầu hình Laravel Mix:

  • Mình copy các file ảnh trong thư mục resources/images, các file fonts resources/fonts vào trong thư mục assets.
  • Thiết lập build JS các file resources/scripts/app.jsresources/styles/app.scss tương ứng.
  • Thiết lập browserSync để tự động reload trình duyệt sau mỗi khi file sửa đổi.

Tổng kết

Trên đây là một số cách mà mình áp dụng để dùng được Composer, Laravel Mix và code theo hướng OOP trong dự án Wordpress. Hy vọng bài viết này sẽ mạng lại thêm một số kiến thức thú vị tới các bạn.

Mỗi lượt upvote/follow cũng như là một lời cảm ơn để mình có thêm động lực ra bài. Đọc tới đây rồi mà bạn vẫn chưa nhấn upvote và follow mình thì thật là buồn. Vậy nên đừng quên nhé bạn!

Cảm ơn các bạn đọc đã đọc tới hết bài. ?

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 499

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 374

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 420

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414