destructuring làm tham số
Mình thấy bạn đặt câu hỏi là destructuring tức là đã biết tới cả tên syntax này rồi mà lại chưa hiểu về nó quả thật phải bái phục, bái phục. Mấy bạn dev có khi viết code theo syntax này suốt mà còn không nhớ nổi tên gọi là gì luôn =))
Syntax này hơi khó giải thích, bạn đọc thử document này nhé, nó có ví dụ cụ thể và mình thấy khá dễ hiểu. Mình cũng đính kèm một bài viết bằng Tiếng Việt trên Viblo, bạn tham khảo nha. Nếu đọc doc xong mà vẫn chưa hiểu thì mình sẽ giải đáp thêm cho bạn.
Làm thế nào lấy tất cả sản phẩm của Shop trong Shopee ?
Mình cũng chưa làm với api của Shopee bao giờ. Nhưng mình thấy có khá nhiều API trong document. Không biết bạn đã đọc cái api này chưa: Product > get_item_list
- https://open.shopee.com/documents?module=89&type=1&id=614&version=2
Ngoài ra cũng có thử inspect xem API mà trang https://shopee.vn gọi thì thấy nó gọi API khác hoàn toàn so với document ở trang trên. Không biết có phải là phải hợp tác thì mới có doc xịn hay không nữa.
Laravel pusher
Mình nghĩ là bạn sẽ cần những thứ sau:
- Database để lưu lại dữ liệu về lịch sử like: ai like cái gì, like khi nào...? Bạn có thể lưu vào MySQL, Postgres, MongoDB... đều được.
- Dựng thêm socket server để làm broadcast notification (realtime). Cái này có thể dùng laravel-echo-server với socket.io hoặc pusher... cũng được.
- Tích hợp laravel-echo-client ở frontend để browser có thể nhận được broadcast notification
Làm thế nào để đăng sản phẩm lên shopee
Sao không vào luôn shopee tạo cho nó nhanh nhỉ?
Nếu bạn muốn có cả thông tin sản phẩm ở website Laravel và cả trên Shopee. Bạn có thể lưu thông tin sản phẩm trong database của Laravel rồi có thêm chức năng đồng bộ dữ liệu qua shopee. Sản phẩm nào đã được đồng bộ thì bạn gắn cái Shopee ID của sản phẩm đó vào record tương ứng trong database của mình.
Việc thêm sản phẩm thì bạn có thể dùng API của Shopee. Bạn xem API Reference tại đây: https://open.shopee.com/
Ngoài ra, nếu muốn dùng API của Shopee thì bạn phải đạt các yêu cầu sau nha:
1.1. Đối với Người Bán
- Tài khoản mà bạn muốn kết nối API phải là tài khoản Shop Yêu Thích hoặc Shopee Mall.
- Bạn phải có lập trình viên để hỗ trợ kết nối API
- Bạn cần có hệ thống quản lý đơn hàng, sản phẩm riêng (Hệ thống phải được lập trình trên website để quản lý đơn hàng, sản phẩm).
- Hệ thống của bạn phải có khả năng kết nối với hệ thống khác.
1.2. Đối với đối tác là bên thứ ba (3rd Party)
- Đối tác cần có giấy phép kinh doanh và website chính thức của công ty.
- Cần cung cấp tải khoản dùng thử và mật khẩu để Shopee kiểm chứng tài khoản trước khi xét duyệt.
Chi tiết xem thêm: https://banhang.shopee.vn/edu/article/8497
Sử dụng puppeteersharp để crawl data
Mình thấy nếu đi crawl thì phải chấp nhận việc website nguồn thay đổi trong HTML thôi chứ làm sao được. Thường mình mình thay khai báo các phần selector tới element để lấy data thành một cái constant. Tổng hợp nó lại vào một file config rồi khi có thay đổi thì mình sẽ sửa biến const đấy cho đỡ mất công đi tìm.
Thêm chữ ký vào file pdf đã có
Câu hỏi của bạn chưa rõ ràng nên mình chưa hiểu lắm là bạn muốn code chức năng hay đơn giản là bạn muốn chèn chữ ký thôi chứ không code? Nếu code thì cũng không biết bạn dùng ngôn ngữ lập trình nào, framework gì..
Bạn thử tham khảo những bài viết này xem sao nha:
- Thêm signature bằng Adobe Acrobat Reader: https://www.jotform.com/blog/how-to-add-a-signature-to-a-pdf/
- Code chức năng Sign pdf bằng PHP: https://morioh.com/p/826ce29ec83c
Zalo widget chat làm sao tự động bật lên?
Bạn hãy thử dùng các method SDK của Zalo xem sao nhé!
Mình đoán nó hoạt động như này:
- openChatWidget: Mở khung chat
- closeChatWidget: Đóng khung chat
- init: Khởi tạo iframe để nhúng chat widget vào website
- reload: Nạp lại config và khởi tạo lại chat widget
Vấn đề index Google của website dùng Angular
Bạn có thể show sitemap.xml của dự án mà bạn đang generate ra không nhỉ? Ngoài việt tạo file sitemap.xml để tổng hợp các URL cần đánh index, tần suất index thì bạn phải chỉ định link tới file sitemap.xml trong Google Search Console nữa.
Bạn cũng thử kiểm tra file robots.txt nữa, cũng có thể là do bạn đang cấu hình chặn việc đánh index một số trang cũng nên. Bạn thử check xem nhé.
lỗi kết nối cơ sở dữ liệu trong laravel8 ai giup voi
Bạn vào trang quản trị của hosting rồi bật PDO extension cho PHP lên nhé.
Hỏi về dựng layouts
Loại layout này mình nhớ được gọi tên là Masonry. Bạn search trên Google sẽ ra nhiều cách implement nhé. Nếu đang tự viết theo Flexbox thì bạn tham khảo bài này: https://css-tricks.com/piecing-together-approaches-for-a-css-masonry-layout/
Mình thấy có cái lib là vue-masonry nhưng cũng chưa dùng thử. Bạn cũng tham khảo thêm nha.
Cho mình hỏi cài cái đăng nhập google như này thế nào
Đây là chức năng đăng nhập vào Viblo bằng Google Accounts thông qua một dịch vụ được gọi là Google One Tap Sign-in (miễn phí). Giúp tự động hiển thị một hộp thoại chứa các tài khoản Google đã đăng nhập trên browser. Người dùng chỉ cần chọn tài khoản là có thể đăng ký/đăng nhập được luôn bằng tài khoản Google.
Để làm điều này, bạn cần làm hai việc:
- Embed thêm đoạn code của Google One Tap để nó hiển thị cái hộp thoại chọn tài khoản như hình của bạn. Đoạn code này được Google generate cho mình chèn vào website nhé.
- Viết thêm một cái API callback trên backend server, để sau khi người dùng chọn tài khoản và Google xác thực thành công thì nó sẽ callback về đó. Ở đây sẽ đặt logic xử lý tạo mới tài khoản hay cấp quyền đăng nhập cho Viblo user.
Hướng dẫn chi tiết cũng còn nhiều bước, bạn làm theo doc của Google tại đây nhé:
- https://developers.google.com/identity/gsi/web/guides/features
- https://developers.google.com/identity/gsi/web/guides/get-google-api-clientid
P/S: Phần chức năng này cũng khá hay, ví dụ nếu bạn nhấn Cancel thì lâu lâu sau Google nó mới lại hiển thị lại cái hộp thoại đăng nhập như trong hình. Cũng có các hook để mình tùy biến thêm, ví dụ như trên Viblo, sau khi nhấn Cancel thì một cái popup nhỏ phía dưới màn hình sẽ hiển thị lên. Khi Google One Tap đang hiển thị thì cái popup đấy được ẩn đi.
[MySQL] Làm sao để dữ liệu tự xóa sau 7 ngày
Bạn có thể crontab trên server để schedule nhé. Crontab là công cụ trên server giúp đặt lịch để thực thi một chương trình nào đó. Như bạn thì tự động xóa records trong table sau số ngày nhất định. Về phần chương trình thực thi thì có thể là:
- Script chạy lệnh SQL trực tiếp bằng command line
- Script của ứng dụng của bạn, trong script của ứng dụng thì sẽ chứa logic để quyết định nên xóa những record nào.
Thường các web framework thì đều có các cơ chế scheduling, chúng ta chỉ cần đặt crontab chạy script của framework, sau đó framework sẽ dựa vào config của người dùng để thực thi các công việc tương ứng.
Hỏi về eager loading trong laravel
Bạn vẫn có thể dùng with
và load
bình thường mà. Bạn thử kiểm tra xem:
- Có thể bạn khai báo relation sai chăng, nếu sai thì sẽ có lỗi bắn ra, bạn up thêm tracelog lên đấy để mọi người dễ giúp.
- Dùng with/load sai chăng,
with
thì sẽ tồn tại trong Query Builder, cònload
thì ở Collection/Model - là kết quả của Query Builder sau khi thực thi truy vấn.
Hỏi về Role Middleware trong laravel
-
Đối với web, Laravel căn cứ vào session và cookie để xác định bạn đã đăng nhập hay chưa, đang đăng nhập bằng tài khoản nào.
-
Đối với API, thường mọi người sẽ làm stateless, không còn có session và cookie nữa. Khi đó sẽ cần giải pháp authentication khác như dùng API Token/Access Token, OAuth.. Có nhiều library hỗ trợ implement cho Laravel như: Passport, Sanctum... Cơ chế xử lý có thể khác nhau nhưng bản chất, client (mobile) sẽ gửi request luôn kèm header
Authorization
chứaAccess Token
. Đó là căn cứ để server authenticate. -
Bây giờ bạn cần kiểm tra xem, cái middleware Authentication kia của bạn đã config cho đúng guard của API chưa? Với Laravel, nó hỗ trợ multi-authentication nên cần check chính xác. VD: API bạn dùng guard 'api' mà default là 'web' thì bạn
Auth::user()
nó sẽ luônnull
, thay vào đó phải làAuth::user('api')
chẳng hạn. -
Chọn một cái library như: Passport, Sanctum... hoặc tự viết tùy nhu cầu của bạn.
Wordpress
Dùng theme Flatsome cũng ngon bạn ạ. Có hỗ trợ nhiều component, UX Builder thì trực quan KH cũng dễ dùng. https://flatsome3.uxthemes.com/
Câu hỏi về docker mong mọi người giúp đỡ
Bạn cứ chạy lệnh docker build thôi là được nhé. Vì Docker có Layer Caching nên khi bạn build image nó sẽ không chạy lại những lệnh đã success trước đó mà sẽ chạy tiếp từ chỗ lệnh bạn thay đổi hoặc bị lỗi.
Còn về Backup DB, thường mình hay chạy một service riêng. Backup hàng ngày. Về cơ bản vẫn là dùng cron để chạy lệnh backup của các DBMS cung cấp như: mysqldump của MySQL, pg_dump với PostgresSQL... Nhưng chẳng qua là đóng gói nó lại thành một image và chạy thành service backup riêng thôi. Bạn nên thiết lập cron backup vào khung giờ ít người dùng như tầm 3h, 4h sáng mỗi ngày chẳng hạn.
Tham khảo cách viết image này của Viblo: https://github.com/viblo-asia/docker-postgres-backup
Logic logrotate trên centos
Theo như config kia thì anh thấy là syntax và cấu hình đúng rồi em ạ. Không biết em đang check như nào để nhận định là "không có file rotate" nhỉ? Có khi nào em đang filter theo các file .log.*.gz
nên nhận định như vậy không?
Trong config của em anh thấy có dùng compress
kết hợp với delaycompress
. Khi bật delaycompress
thì sẽ chưa có file archive (*.gz) của file log mới đâu. VD:
- Ngày 01/01 -> tạo file log cho ngày 01/01, chưa có file gz nào được tạo.
- Ngày 02/01 -> tạo file log cho ngày 02/01, archive file log ngày 01/01, chưa có file gz cho ngày 02/01.
- Ngày 03/01 -> tạo file log cho ngày 03/01, archive file log ngày 02/01, chưa có file gz cho ngày 03/01.
Em thử bỏ cái delaycompress
thì file log rotate mới sẽ được archive thành file *.gz
luôn.
lỗi dd và show value trong Laravel
Mình nghĩ có thể là do có một cái category của bạn không có bài viết nào, nên $post_cate[$a]->first()
sẽ trả về null và gây lỗi.
Bạn có chắc chắc là trong tất cả các category đều có bài viết ko?
Lưu công thức trong database
MÌnh nghĩ không nên lưu thành bảng riêng như vậy. Mình suggest là làm một cái bảng đơn giản là chứa các cột:
- Biểu thức tính toán: Lưu nguyên cái biểu thức vào thành dạng chuỗi. VD: "(A + B) * 2"
- Kết quả: Nếu cần thiết thì bạn lưu lại kết quả đã tính.
Việc chuyển string thành phép tính thì mình nhớ ngày xưa đi học các thầy cô hay cho viết chương trình để chuyển một chuỗi thành biểu thức hậu tố và tính toán. Nên việc chuyển đổi string biểu thức tính toán chắc là sẽ có nhiều tool hỗ trợ.
Hỏi về show list data trong laravel
Hình như content dài nên bạn muốn lấy 100 ký tự để tối ưu cho câu truy vấn. Như vậy thì trong câu truy vấn bạn cắt luôn 100 ký tự đầu tiên của content là được. Có thể dùng hàm LEFT
trong SQL để cắt.
SELECT
id, title, LEFT(content, 100) as short_content
FROM your_table
Tuy nhiên bạn nên lưu ý, nếu content của bạn có chưa HTML / Markdown syntax thì việc cắt chuỗi bằng SQL sẽ có thể gây sai lệch cú pháp HTML/Markdown. Do vậy, nếu bạn muốn ổn hơn thì nên lưu thêm một cột short_content
riêng.