Tạo function với dynamic parameter trong PHP
Mình nghĩ nếu thay đổi, bạn có thể pass thẳng $row
cho Obj, đồng thời sửa lại Obj constructor:
while ($row = mysqli_fetch_assoc($data)) {
array_push($arrayData, new Obj($row));
}
Nhờ mọi người giải thích giúp mình ý nghĩa của dòng lệnh này trong JavaScript
Đoạn này cũng dễ hiểu mà, đơn giản là nó tạo ra một chuỗi ký tự ngẫu nhiên có độ dài 16 ký tự, theo quy tắc:
- Tạo ra 4 chuỗi
s4
- Để tạo ra chuỗi 4 ký tự: Tạo ra một số ngẫu nhiên, rồi +1 đơn vị.
- Tiếp theo, nhân số đấy với 2^16 = 65,536 = 0x10000 (hexa).
- Làm tròn tích thành số nguyên rồi chuyền về dạng hexa string:
toString(16)
. Do 2^16 hệ hexa là 10000, có 5 ký tự nên tích của một số với 10000 chắc chắn có hơn 5 ký tự, sau khi chuyển về hexa, cắt bỏ ký tự đầu tiên.
- Nối 4 chuỗi ở bước 1 với nhau để tạo ra chuỗi 16 ký tự.
V/v trỏ domain *.me (namecheap) về hosting của hostinger.vn
Đơn giản lắm, bạn trỏ bằng nameservers hoặc dùng IP address cho nhanh. Bằng cách đổi nameservers của domain thành namesevers của Hostinger
.
Cách 1: IP Address
- Đăng nhập hosting, nó sẽ có một cái IP tương ứng với hosting đấy. Copy IP đấy.
- Đăng nhập domain control panel, vào phần DNS, bạn tạo record với
type
là A,value
là IP của hosting, tls bạn chỉnh về 0 hoặc không chỉnh được về 0 thì chọn số nhỏ nhất.
Cách 2: Dùng nameservers
Cụ thể:
- Đăng nhập hosting, xem thông tin và copy nameservers, nó có dạng:
ns1.hostinger.vn
ns2.hostinger.vn
ns3.hostinger.vn
- Đăng nhập domain control panel, có phần cấu hình DNS. Bạn vào đó rồi đổi nameservers thành
ns1.hostinger.vn
.
Chi tiết: https://www.hostinger.vn/huong-dan/cach-tro-ten-mien-ve-host-hostinger/
Giúp đỡ cách tạo file.js trong router và khai báo ở app.js như thế nào ??
Sao 3 routes của bạn lại "dùng chung" một adminRouter
thế kia? Mình nghĩ bạn làm như này sẽ gọn gàng hơn, giả định ở đây mình dùng Express:
/** app.js **/
const adminRouter = require('./routes/admin')
app.use('/admincp', adminRouter)
/** admin.js **/
const router = express.Router()
router.get('login', ...)
router.get('signup', ...)
...
// Nếu số lượng route ở đây nhiều, có thể gom nhóm các route liên quan rồi tách ra một file khác.
// Ví dụ: gom nhóm bọn route cho accounts module vào một file accounts.js
const accountsModuleRouter = require('./accounts')
router.use('accounts', accountsModuleRouter)
// Hoặc đơn giản chỉ là: router.use(accountsModuleRouter)
module.exports = router
lỗi Call to undefined method MongoClient::selectDatabase()
Mình tưởng là thế này chứ nhỉ:
$client = new \MongoDB\Client()
$database = $client->selectDatabase('test')
Website ngày nào cũng bị chết tầm 3,5 phút . Nhờ các bác trợ giúp
- Bạn thử kiểm tra trên server xem có cronjob nào chạy cố định vào thời điểm đấy ko hay ngoài thời điểm đấy có còn lúc nào bị chết không?
- Sau rồi mình nghĩ là nên check logs xem có thông báo lỗi gì không, server die thể nào cũng để lại logs.
- Kiểm tra logs của app, logs của nginx/apache...
Nhờ kiểm tra giúp mình xem độ trễ do đâu mà ra
Viblo có support nhúng codepen vào bài viết, question, answer nè bạn :
{@codepen: https://codepen.io/Hoangvan/pen/xzWjRj}
How to returns HTML from a custom parser function in Simplemde..
Mục Configuration trong documentation có ghi rõ này em:
placeholder: Custom placeholder that should be displayed
Trong example cũng đã có code sử dụng mẫu option này rồi mà.
Insert Font Awesome icon into SimpleMDE placeholder (Tip)
Dạ, e biết cái đó ạ, nhưng em không thêm được mấy cái font-awesome ấy a.
Cái placeholder đấy được render vào element .CodeMirror-placeholder
, em copy icon mà em muốn hiển thị vào string placeholder. Muốn cái icon đã copy hiển thị được, em add thêm font cho cái element CodeMirror-placeholder
:
.CodeMirror-placeholder {
font-family: Arial, FontAwesome !important; /* Add FontAwesome */
}
reactjs startkit chạy ở môi trường production load chậm
Mấy cái link kia chắc là bạn dùng browser-sync để run web ở development mode, như vậy thì hơm sao đâu bạn. Mà bạn có chắc là web đang chạy ở production mode và disable browser-sync hơm? Mình nghi bạn đang run web ở development mode cho production.
Tại sao Laravel ServiceProvider gọi phương thức $this->app->rebinding() "không tồn tại"?
@quynh001 Mình thật sự vẫn chưa hiểu được câu hỏi của bạn.
Thứ 1: Đúng là chỉ có thể gọi rebinding qua các instance của Illuminate\Foundation\Application
và Illuminate\Container\Container
vì chỉ 2 class này có method đấy. Và Illuminate\Foundation\Application
rõ ràng là extends từ Illuminate\Container\Container
mà Container lại có rebinding nên đương nhiên gọi được.
Thứ 2: Và trong ServerProvider gọi các method bind
, rebinding
là thông qua instance của Application
mà bạn nhỉ? Nếu trong ServiceProvider bạn gọi $this->rebinding
thì chắc chắn không được rồi vì nó làm gì có nhỉ?
Thứ 3: Là bạn đang bị nhầm lẫn một chút thì phải, ServiceProvider không phải là một instance của Application.
Sr bạn cái này mình đọc nhầm. Bạn nói đúng, ServiceProvider chứa app là instance của Application.
Thứ 4: Interface chỉ là một cái contract để diễn đạt rằng các instance của interface đấy sẽ thực hiện được những hành động gì (thông qua các method trong interface). Các lớp khác nhau có thể tương tác với chúng thông qua interface mà không cần biết triển khai các method ở mỗi class ra sao. Và chỉ các method mô tả đặc trưng của class như vậy thì bỏ vào interface. Còn các method râu ria phục vụ các việc khác thì không nên để vào để giữ các contract được sạch đẹp và thể hiện đúng mô tả đặc trưng của nó.
Trên đây là ý kiến của mình, mời bạn tham khảo.
Cần các anh giúp Close app trên notification
Bạn thử tham khảo link này xem: https://stackoverflow.com/questions/43058960/exit-application-after-click-on-android-notification
Intent intent = new Intent("close_app");
PendingIntent pIntent = PendingIntent.getBroadcast(this, (int)
System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
.
.
.// build your notification
Then in your onCreate:
private BroadcastReceiver mReceiver;
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TAG" ,"onReceive ");
finish();
}
};
Then receive your action and register in your onCreate or onResume:
IntentFilter filter = new IntentFilter();
filter.addAction("close_app");
registerReceiver(mReceiver, filter);
Cho em hỏi cách quy đổi số
Không có sẵn hàm nào trong JS để format number như bạn nói. Bạn có thể viết một hàm format lại long number về dạng short number ở trên.
Bạn tham khảo function bên dưới:
function intToString (value) {
var suffixes = ["", "k", "m", "b","t"];
var suffixNum = Math.floor((""+value).length/3);
var shortValue = parseFloat((suffixNum != 0 ? (value / Math.pow(1000,suffixNum)) : value).toPrecision(2));
if (shortValue % 1 != 0) {
var shortNum = shortValue.toFixed(1);
}
return shortValue+suffixes[suffixNum];
}
Nếu bạn muốn format number ở nhiều dạng khác hơn thì có thể dùng package đã có như:
Hỏi về cách đặt tên file trong SASS
Tên file bắt đầu bằng _
là quy tắc thể hiện một partial
của SASS. Nếu bạn muốn import một phần của stylesheet vào main stylesheet của bạn, nhưng không muốn file đấy được compile thành một file css thì file đó chính là một partial
. Hãy đặt tên file đấy bắt đầu bằng ký tự _
.
Ngoài ra, một số tools giúp compile file SASS thành CSS sẽ ẩn đi những file partial
. Và bạn có thể đọc tham khảo documentation của SASS tại https://sass-lang.com/documentation nha. Đương nhiên là có luôn cả thông tin về partial chính thống trong đó rồi.
Update
Bình thường bạn chỉ định rõ một file main.scss
nên bạn thấy SASS bỏ qua các file râu ria và output là main.css
. Nhưng thay vào đó nếu bạn dùng một tool nào khác (gulp chẳng hạn) để compile hẳn một folder chứa nhiều file sass.
Khi đó những file css được tạo ra sẽ tương ứng với các file sass mà được đặt tên không bắt đầu bằng _
. Những file partial lúc này sẽ không được compile thành một file CSS tương ứng nữa.
Append không hiển thị source code HTML trong 'View Source Code'
Có vẻ bạn đang bị nhầm View Source Code
với Inspect - Dev tool
rồi! View source code
sẽ hiển thị mã nguồn gốc của trang hiện tại mà server đã trả về. Coi như là xem một file text thôi, không xử lý gì cả. Còn Inspect lên sẽ xem được nội dung hiện tại của trang web, sau khi đã chạy cả code javascript.
Để kiểm tra đã append được chưa, bạn có thể xem ngay trên view của web hoặc xem trong Inspect Elements DevTool. Nếu bật DevTool lên mà thấy append được code vào rồi thì là bạn đã làm thành công rồi.
Share template thông qua API
Mình nghĩ là không nên lấy template qua API như vậy. Bạn có thể tách template dùng chung giữa nhiều dự án ra một Git Repository khác, bên project kia nếu muốn dùng thì mình dùng git clone về rồi thêm vào.
Nếu là bên PHP, mình có Composer, mình sẽ tách ra thành một package riêng cho template này. Và sang project khác thì mình dùng Composer để cài thêm package template vào. Composer hoạt động cũng giống như NPM của NodeJS ý bạn. Không biết là bên Rails có thành phần nào tương tự như Composer không.
Thắc mắc về Jquery Promise
Mình chưa hiểu vấn đề của bạn, tức là bạn muốn hiểu về Promise trong javascript hay là chưa biết cách giải quyết cho việc hiển thị dữ liệu tổng hợp ra màn hình?
Còn về cách hiển thị dữ liệu được tổng hợp ra màn hình thì mình nghĩ bạn có thể tham khảo như sau:
async function layDuLieuTongHop () {
const firstData = await axios.get('api/first')
const secondData = await axios.get('api/second')
return tongHop(firstData, secondData)
}
layDuLieuTongHop()
.then(function(data) {
// Hiển thị data đã được tổng hợp ra màn hình.
})
Cho mình hỏi về steps trong Css với !
steps
ở đây là tên một class thôi bạn ạ.
.header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:before,
Tức là khi button .menu-btn
được check tương ứng với việc mobile menu được mở thì tất cả element có class .navicon
bên trong .menu-icon
kế tiếp ngay sau .menu-btn
mà .menu-icon
này không chứa class steps
thì sẽ có top: 0
. Và top: 0
này chỉ áp dụng cho phần before
.
Cách viết laravel để tiện cho người dùng
Ý em là làm Menu điều hướng ở trên website có thể được thay đổi trong Admin à.
- Thêm/sửa/xóa một menu item.
- Menu item được thêm có thể là Danh Mục của hệ thống hoặc không phải Danh mục tức nhập tay gồm: Tiêu đề, URL, vị trí.
Như vậy, a nghĩ e có thể tham khảo, mình tạo một bảng menu lưu danh sách menu item. Menu item có các thuộc tính:
- label: Tên được hiển thị trên menu
- url: Đường dẫn tới trang đích khi click vào menu item
- category_id: ID của danh mục (nếu menu item liên kết tới một danh mục hệ thống trong trường hợp thêm dựa trên category). Cũng là để phân biệt menu item là danh mục hay là nhập tay.
- parent_item_id: ID của menu item cha chứa nó.
- position: Số thứ tự của item đó trong danh sách menu.
Về giao diện quản trị, nếu để thuận tiện cho người admin thì anh nghĩ cứ show danh sách menu item ra, hiển thị theo nhóm theo parent_item_id. Mỗi menu item có một icon hỗ trợ kéo thả (hoặc không thì nút click up/down) để thay đổi vị trí menu item trong danh sách; Một icon để chỉnh sửa menu item; Một icon để xóa.
Khi thêm mới menu item lúc nhập tên có có thể search theo tên danh mục, hiển thị dạng auto complete. Nếu được chọn, thì lưu thêm category_id để liên kết tới danh mục. Trường hợp không liên kết thì cứ lưu lại label, url position như bình thường.
Về việc hiển thị thì mình query hết menu item ra rồi, nhóm phân cấp theo parent_item_id/ sắp xếp theo position bằng PHP. Hoặc em query lần lượt theo parent_item_id cũng được. Sau khi log ra một danh sách theo thứ tự đúng thì lúc hiển thị có thể làm kiểu đệ quy. Ngoài ra, vì menu thì ít thay đổi nên sau khi có được danh sách đã sắp xếp, em cache forever nó lại. Lần đầu thì query từ db, nhóm sắp xếp. Lần thứ 2 thì lấy trong cache ra. Sau này, mỗi khi admin thêm sửa xóa thì em xóa cache đi là được.
Ngoài ra nữa là, thay vì dùng parent_item_id em có thể nghĩ ra cách nào đó như quản trị theo cách nhóm menu chẳng hạn... Và nếu yêu cầu của hệ thống không cần làm đến mức kéo thả/auto complete như a nói thì đừng làm. Nhất là nếu outsource, thì làm đúng đủ theo yêu cầu khách hàng thôi nhé.
url() và route()
Nếu cái route đấy dùng nhiều thì mình thường sẽ dùng route($name)
thay vì url
. Lý do là khi mình thay đổi url, giữ nguyên route name thì sẽ không phải sửa các chỗ gọi hàm nữa.
Lỗi throttle trong Laravel
cái này 'throttle:60,1'
- TH1: Nếu đã đăng nhập: Là cho phép user được truy cập tối đa 60 request / 1 phút tới các apis tương ứng.
- TH2: Nếu chưa đăng nhập: Là cho phép client có IP
xxx.xxx.xxx.xxx
được truy cập tối đa 60 request / 1 phút tới các apis tương ứng.
Thứ tự check: Check TH1 sau đó mới check TH2.
Nếu bạn test dưới local, chưa đăng nhập thì tất cả các client đều chung IP loopback nên có thể làm bạn nghĩ là cả server die luôn.
cái này 'throttle:60,1'
Chú ý: Nếu được sử dụng ngay trong kernel mặc định thì tức là nó đang áp dụng cho toàn bộ apis.