Cách chỉnh sửa code wordpress và woocommerce
Thường thì mình sẽ custom theme, vì thường thì theme nó sẽ tích hợp với cái plugin WooCommerce. Việc mình làm lúc đấy sẽ là tạo child-theme kết thừa từ theme gốc. Sau đó, những file nào cần custom thì mình sẽ override lại file đó bằng cách copy file ở theme gốc vào thư mục tương tự trong child-theme, rồi sửa trực tiếp trong file copy đó. Nếu cần hook để custom thêm thì mình cũng sẽ viết và nhét vào trong cái child theme đó luôn.
Lập kế hoạch và lên bộ testcase
Theo mình bạn nên confirm trực tiếp với team leader về task đó để mọi người trong team đều có cái nhìn chung về yêu cầu đối với task bạn đang được assign. Khi nào thì task đó được đánh giá là Done, điều này cả team thống nhất mình nghĩ sẽ là hợp lý nhất.
Mình nghĩ teamleader hoặc đồng nghiệp của bạn sẽ không qua đó mà đánh giá thấp bạn hay gì đâu. Thay vào đó thì việc trao đổi trực tiếp sẽ nhanh hơn là việc ngồi đây đoán xem phải làm như thế nào.
Hỏi cách sửa web ?
Cái này bác phải debug để tìm nguyên nhân thì mọi người mới dễ dàng hỗ trợ. Chứ nếu chỉ mô tả chung chung như vậy thì khó mà phán đoán vấn đề đang nằm ở đâu.
hỏi làm menu dropdown load sang trang webpage mới không cần nút submit trong javascript
Nếu dropdown của bạn đang dùng select/option
thì bạn có thể bắt sự kiện onchange
của thẻ <select>
. Bạn lấy value được chọn từ event
, chính là đường dẫn tới trang cần chuyển rồi chuyển trang bằng lệnh window.location.href = '/your-next-page'
là nó sẽ chuyển trang.
Mình có đoạn code java để mã hóa secretkey , mình muốn chuyển nó qua php
Bạn thử như vậy xem nhé:
$message = "{$method}{$space}{$uri}{$newLine}{$timestamp}{$newLine}{$accessKey}";
$hex = hash_hmac('sha256', $message, $secretKey);
$encodeBase64String = base64_encode($hex);
Hỏi về WebSocket
MÌnh đang hiểu là browser của bạn connect vào cái websocket server của bên thứ 3. Khi browser nhận được notifify thì sẽ gửi nội dung đó vào email cho người dùng.
Cách triển khai của bạn nghe nó hơi ngược ngược sao ấy. Việc gửi email sẽ cần thông tin như username, mật khẩu của mail, thì việc này phải do phía server đảm nhiệm chứ sao lại để client handle được nhỉ?
Còn việc bạn connect tới ws server ở browser mình nghĩ khó mà đảm bảo 24/7, thường thì các websocket sẽ có heartbeat làm healthcheck, ví dụ như bạn kết nối mà không làm gì thì ws server sẽ ngắt kết nối, mạng của bạn không ổn định thì cũng sẽ có thể heartbeat fail và ngắt kết nối...
hỏi về cách triển khai project vuejs
1. Chức năng custom ít
Nếu trước mắt, "1 số chức năng" mà bạn đề cập là con số ít và nhỏ, chỉ là fontend function thôi, thì bạn cứ code chung luôn 1 source code, sử dụng environment variable khi deploy để bật/tắt các chức năng tương ứng hoặc đại loại là ý tưởng như vậy. Nếu số lượng nhiều thì chuyển qua tham khảo sang kiểu số 2.
2. Chức năng custom nhiều
Nếu "1 số chức năng" là số lượng lớn và thực sự khác biệt so với phần project còn lại thì tốt nhất mình nghĩ bạn nên tách luôn mỗi project ra một repo riêng để tránh BREAKING CHANGE giữa các project.
Để thuận tiện thì bạn nên tổ chức code thành các package riêng rẽ, và dùng NPM để cài đặt vào các project sử dụng. Lúc này ở từng project bạn chỉ cài package qua NPM và thêm một đoạn code nhỏ để install là xong. Như thế thì việc tái sử dụng code sẽ linh hoạt hơn và không bị breaking change.
Bạn có thể dùng git submodule, hoặc dùng kiểu 2 mình trả lời ở trên. Tách ra thành package thì package đó bạn code gì bên trong cũng được 😃 Ví dụ như cả cái màn quản lý user. =))
Chẳng hạn như Viblo, bọn mình có chức năng đăng nhập, phần backend mình cũng tạo một cái package, tất cả các con service vệ tinh chỉ cần cài nó là có phần đăng nhập, ở frontend cũng có package đăng nhập, cài vào có phần tích hợp đăng nhập với backend.
Hay kiểu như mấy component dùng chung giữa các service như phần User Menu trên thanh Navbar của Viblo, Viblo Code, Viblo Accounts. Để ý bạn sẽ thấy nó đều gần giống nhau, chỉ khác phần link dropdown phía dưới. Đó là component đó được tách ra và đặt vào một package npm để dùng chung đó.
Bạn tham khảo cái: https://bit.dev/ giúp tách các component thành các package để tái sử dụng cho từng dự án. Hoặc bạn đóng gói thẳng thành package NPM cũng được mà.
Làm sao để update dữ liệu từ cột này sang cột khác trong cùng một table ?
Update dữ liệu từ cột này sang cột khác trong cùng một table mình làm trong Postgres thì khá dễ như này, bạn thử xem nhé:
update table_name set col_a = col_b where id = 999;
Nếu không có where
thì nó sẽ update cho toàn bộ row trong table.
JS, CSS trả về xen kẽ 404 or 200
Bạn thử check lại config về cache của Nginx xem. Mình thử thì mỗi lần nó trả về 2 file với nội dung khác nhau.
-
Truy cập lần 1, response là nội dung file hiện tại.
-
Truy cập lần 2, có status là 304, có vẻ là có HTTP Cache nên Nginx lấy từ trong cache storage ra. File cache này là file cũ của lần build trước.
-
Nếu bạn tích chọn Disable cache trong devtool thì dù F5 bao nhiêu lần cũng chỉ có một response duy nhât là 200 với TH truy cập lần đầu.
Do vậy, mình đoán là việc xử lý cache của bạn có vấn đề rồi.
Validation request với Joi trong Express
Xem code bác @HungSmeb bổ sung thì có vẻ đúng như bác @trinhvideo123 nói. Mình cũng đồng quan điểm với @trinhvideo123 như vậy.
- Nếu bác để là
throw CreateError.BadRequest(error.message);
thì app nó sẽ bị dừng tại lệnh throw này gây crash. - Nếu bác để là
next(CreateError(error.message));
thì tức là bạn chuyển cáiexception
sang middleware tiếp theo để Express xử lý tiếp. Cái exception này khi qua middleware tiếp theo thì được trả thành response json như hình.
[MySQL] Làm sao để Select * from Stored procude
Stored Produce là chức năng cho phép bạn lưu lại đoạn SQL Query để bạn có thể tái sử dụng câu truy vấn cho các lần sau bằng cách thực thi StoredProduce.
Trong câu hỏi của bạn có mẫu SQL tạo StoredProduce, bạn sử dụng lệnh EXEC để chạy truy vấn đó sẽ lấy ra được data. Sau đó, có thể insert kết quả này vào bất cứ table nào bạn muốn. Dùng lệnh INSERT như bình thường thôi bạn.
INSERT INTO #YourTempTable VALUES EXEC productpricing;
đọc dữ liệu từ máy chấm công
Theo mình biết thì mỗi thiết bị máy chấm công sẽ có một IP riêng, thường thì bạn truy cập vào IP sẽ vào web server của thiết bị. Từ đó có thể download được dữ liệu chấm công về. Việc download thì chỉ cần gửi HTTP request thôi chứ code không khó. Bạn thử nghiên cứu thêm về thiết bị bạn đang dùng xem sao nhé.
React Native: cách hiển thị ảnh kích thước rất lớn mà không bị giảm chất lượng
Câu hỏi của bạn khá hay. Hay bạn thử chuyển qua đặt ảnh đó thành background xem có ổn hơn không? Đặt ảnh làm background rồi căn chỉnh tọa độ cho phù hợp với vị trí nội dung của lần cuộn tiếp theo. Như vậy thì chất lượng cũng sẽ được đảm bảo hơn.
[PHP] Làm thế nào xử lý 1 vòng lặp for dài bên trong chứa các câu query ?
Bạn nên xây dựng thêm service queue-job riêng để đẩy những nghiệp vụ tốn nhiều thời gian vào queue (hàng đợi) và chạy ngầm. Không biết bạn dùng PHP thuần hay đang dùng framework nào không nhỉ? Như Laravel thì có built-in hệ thống queue-job để dùng luôn rồi.
laravel eloquent query ??
Bạn có thể dùng NOT EXISTS trong SQL theo mẫu dưới đây hoặc dùng whereDoesntHave
trong Query Builder của Laravel.
SELECT users.*
FROM users
WHERE NOT EXISTS (
SELECT id
FROM user_activity
WHERE users.id = user_activity.user_id AND user_activity.created_at >= ?
LIMIT 1
)
$users = User::whereDoesntHave('user_activity', function($query) {
return $query->whereRaw('user_activity.user_id = users.id')
->where('user_activity.created_at', '>=', today()->subDays(30));
});
Mysql convert Mongodb
Bạn dùng thử aggregate
operator xem sao nhé. Câu truy vấn với aggregate
sẽ kiểu như này:
db.TableA.aggregate([
{
"$lookup": {
"from": "TableB",
"localField": "_id",
"foreignField": "id_a",
"as": "dataFromB",
"pipeline": [
{
"$match": {
"ac": 1
}
}
]
}
},
{
"$lookup": {
"from": "TableC",
"localField": "_id",
"foreignField": "id_a",
"as": "dataFromC",
"pipeline": [
{
"$match": {
"ac": 2
}
}
]
}
},
{
"$match": {
"level": 1
}
},
{
$addFields: {
totalB: {
$size: "$dataFromB"
},
totalC: {
$size: "$dataFromC"
}
}
},
{
$project: {
dataFromB: 0,
dataFromC: 0
}
}
])
Output:
[
{
"_id": 1,
"level": 1,
"totalB": 2,
"totalC": 1
},
{
"_id": 2,
"level": 1,
"totalB": 0,
"totalC": 1
}
]
Demo: https://mongoplayground.net/p/DPmpLuHtU2r
Chắc là có nhiều cách truy vấn khác nữa nhưng bạn có thể thử cách này của mình xem sao.
hỏi về sự kiện onbeforeunload
Hình như bạn muốn hỏi các để hiện message hỏi người dùng khi Reload site phải không? Đúng là sẽ dùng window.onbeforeunload
là được đó bạn.
window.onbeforeunload = function (e) {
if (isChanged) {
const message = 'Do you want to leave this page?'
e.returnValue = message
}
}
Về lý thuyết thì trên browser sẽ gắn e.returnValue
để hiện message mình mong muốn. Nhưng thực tế thì với phần custom message trên các browser base trên Chromium đã bị loại bỏ vì vấn đề security.
Xem thêm về report tại: https://bugs.chromium.org/p/chromium/issues/detail?id=587940
Lấy giá trị trong 2 bảng SQL
Mình giả định bạn biết cách thực thi câu truy vấn SQL trong PHP rồi nha. Bạn thực thi 2 câu truy vấn SQL là được nhé:
- Một câu query lấy ra thông tin của 1 product dựa theo ID:
select * from products where prod_id = ?;
- Câu query thứ 2 lấy ra danh sách các product fields:
select * from pro_fields where pro_id = ?;
Trong trường hợp bạn muốn lấy ra danh sách products chứ không phải 1 product như trong câu hỏi trên. Bạn thay phần mệnh đề WHERE sang dùng WHERE ... IN để tối ưu số lượng truy vấn phải thực thi.
select * from products where prod_id in (?, ?, ?);
select * from pro_fields where pro_id in (?, ?, ?);
Sau khi chạy xong 2 câu truy vấn, bạn sẽ chạy vòng lặp trong PHP để nhóm các pro_fields lại theo từng product. Đây cũng là cách để tránh lỗi N + 1 query mà Laravel framework đang áp dụng.
HELP Giúp mình về vị trí trên android với
Cái field "vitri" server họ đang trả về là string chứ không phải JSON Object. Sao bạn không thử confirm đội backend xem có phải họ response nhầm không nhỉ? Nhìn cái value vitri như là một biến được cast sang string âý.
Mà trước khi làm thì bạn nên thống nhất với dev backend về response structure của API đã. Sau đó thì muốn làm gì thì làm =))
this trong class react native
Chính là nó. Đúng rồi đó bạn.