Archive

Archive for the ‘Chỉ dẫn lập trình’ Category

Windows – Chrome does not open link Skype

October 24th, 2015 No comments

Trang web có đoạn mã link tới Skype: <a href=”skype:huyphungvan”>Test call Skype</a>, click trên Firefox thì mở ứng dụng Skype nhưng trên Chrome thì không được.

Lý do: Có thể lần đầu tiên click vào dạng link skype:nick_skype trên Chrome bạn đã chọn không cho mở Skype và “Không hỏi lại về sau”.

Cách giải quyết:

– Đóng hết các cửa sổ Chrome

– Mở file %LOCALAPPDATA%\Google\Chrome\User Data\Local State tìm đoạn “skype”:true và xóa đi

Giờ vào lại Chrome và mở 1 link Skype bạn sẽ thấy 1 thông báo sau xuất hiện. Hãy chọn “Remember my choice for all links of this type” và “Launch Application”. Từ sau khi bạn click Skype sẽ tự động được mở ra.

chrome-alert

Yii2 – ActiveForm – Hiển thị tab lỗi

June 23rd, 2015 2 comments

Khi sử dụng Yii Framework code web bạn sẽ sử dụng ActiveForm để tạo mới, cập nhật một bản ghi. Bình thường, form nhập liệu sẽ được hiển thị liệt kê từ trên xuống. Tuy nhiên với một số model có nhiều thông tin bạn sẽ phải chia nhỏ form ra các tab để nhập liệu thông tin cho gọn và tiện

Ví dụ, bạn có 1 model là Project – dự án bất động sản. Để tạo mới một dự án bạn sẽ phải nhập liệu rất nhiều các thông tin như: tên dự án, chủ đầu tư, giới thiệu chung về dự án, vị trí dự án trên bản đồ, các files ảnh minh họa… Nếu liệt kê tất cả ra để nhập liệu thì nhìn form sẽ rất dài, nhập vẫn được nhưng phải kéo lên kéo xuống, rồi tìm xem ô nào cần nhập giá trị nào, gây khó chịu + mất thời gian. Do đó bạn sẽ chia nhỏ các mục cần nhập ra thành một vài tab.

Khi chia form ra các tab nhập liệu thì sẽ phát sinh vấn đề: Bạn nhập xong hết các tab và ấn nút tạo mới, nhưng do có 1 tab dữ liệu nhập vào không hợp lệ nên form sẽ chưa submit, màn hình đứng yên, tab hiện tại thì đã pass validate không báo lỗi gì!!!

Như vậy code validate mặc định của ActiveForm mà Yii cung cấp sẽ chưa đáp ứng được yêu cầu của bạn lúc này. Bạn phải code thêm để nếu có 1 tab lỗi thông tin nhập liệu thì khi ấn nút Tạo mới tab đó phải được active, báo lỗi cho người nhập nội dung biết để nhập lại.

Cụ thể bạn sẽ viết thêm một hàm và gắn nó vào sau sự kiện validate đã tự động sinh của ActiveForm.

jQuery(‘#active-form’).on(‘afterValidate‘, function() {activeErrorTab();})

// Hàm bạn phải code để hiển thị tab chưa pass validate là activeErrorTab. Gợi ý là gắn id cho các tab, khối nội dung nhập liệu của từng tab. Khối nội dung nhập liệu nào có class has-error thì sẽ là có lỗi validate cần xem lại. Ưu tiên kiểm tra tab từ trái sang phải, tab nào có lỗi thì active hiện ra và break ra luôn.
yii2-active-form-on-afterValidate

Categories: Chỉ dẫn lập trình Tags:

Upload, lưu ảnh khi tạo mới gallery

June 19th, 2015 No comments

Hướng dẫn lập trình

Yêu cầu: Có gallery. Mỗi gallery có nhiều ảnh. Khi tạo mới gallery phải cho phép upload ảnh luôn, chứ ko phải tạo xong edit mới upload được ảnh.
Thực hiện:
– Cấu trúc DB:
+ Bảng gallery: các cột id, name, created
+ Bảng images: các cột id, id_gallery, path, created, status, is_default
– Khi tạo mới cho chọn nhiều files, submit lên sẽ xử lý mảng $_FILES. Tạo mới bản ghi vào bảng gallery, upload files, tạo mới bản ghi vào bảng images với id_gallery là id của bản ghi gallery đã tạo.
Vấn đề phát sinh: Số lượng files lớn sẽ bị lỗi “413 Request Entity Too Large”
Giải quyết tạm thời: Chia nhỏ ra, tạo mới up 3 files. Vào edit up tiếp 3 files, rồi lại edit up tiếp 3 files!!!

Giải quyết triệt để:

– Sử dụng ajax để upload 3 files một mà không load lại trang.
– Khi sửa thì không vấn đề gì vì ta đã có id của gallery.
– Khi tạo mới sẽ xử lý phức tạp hơn một chút, cụ thể như sau:
+ Upload files qua ajax (hoặc post mà target đặt tới 1 iframe ẩn): Tạo các bản ghi images và để id_gallery = 0. Lưu lại các id của images vào $_SESSION
+ Ajax load lại các ảnh đã up dựa theo danh sách id đã lưu trong $_SESSION (hoàn toàn có thể phân trang nữa nếu muốn)
+ Lưu input dạng hidden danh sách id ảnh đã upload
+ Khi người dùng submit, sẽ tạo mới gallery, có id, đem update lại id_gallery cho các images (id các images cần cập nhật chính là dữ liệu ở input hidden – check cả $_SESSION để validate)
+ Xong xuôi xóa dữ liệu trong $_SESSION đi

Đầu số điện thoại di động các nhà mạng Viettel, Vina, Mobi

June 19th, 2015 No comments

Đầu số Mobifone:
090…
093…
0120…
0121…
0122…
0126…
0128…

Đầu số Viettel:
096…
097…
098…
0163…
0164…
0165…
0166…
0167…
0168…
0169…

Đầu số Vinaphone:
091…
094…
0123…
0124…
0125…
0127…
0129…

Đầu số Vietnamobile:
092…
0188…

Đầu số Sfone:
095…

Hướng dẫn đưa 1 app Android lên Google Play

February 26th, 2014 No comments

Bước 1:
– Code ra được 1 app Adroid tối thiểu dạng Hello World (http://developer.android.com/sdk/index.html)
– Xuất ra file APK từ menu Export của Eclipse. Chú ý lưu lại mật khẩu ở bước Key Store (mật khẩu Alias thì dùng chung đỡ phải nhớ 2 cái) để dùng lại ở các lần Export khi update phiên bản về sau.
Bước 2:
– Đăng ký làm developer với tài khoản Gmail tại https://play.google.com/apps/publish/
– Thanh toán 25$ (sử dụng thẻ Visa/Master) để có thể up được APP lên Google Play Store
Bước 3:
– Thực hiện điền các thông tin cho APP: Tên, Mô tả, Ảnh chụp màn hình (lấy từ emulator hoặc device thật) minh họa…
– Up file APK đã export
– Publish ứng dụng
– Chờ đợi (có thể 15-30 phút hoặc vài giờ) để thấy ứng dụng xuất hiện trên Google Play Store: Tìm theo tên ứng dụng bạn đã nhập khi publish hoặc truy cập thẳng vào https://play.google.com/store/apps/details?id=com.huypv.bus trong đó com.huypv.bus thay bằng tên gói ứng dụng của bạn => nếu vào okie là đã publish xong, còn chưa thì chịu khó chờ thêm…