Laptop cũ Asus K53E
Laptop mới bán giá cũ!
Máy tính cho Game thủ
Khuyến mãi đặc biệt!

Tại sao chúng tôi đạt được thành công?

Chúng tôi tập hợp các nhân viên đã từng làm cốt lõi của nhiều công ty, nay cùng hợp tác và lấy sức mạnh mỗi cá nhân tiêu biểu tạo thành khối sức mạnh tổng thể. Vậy nên đảm bảo được các yêu cầu chung và hướng vào giá trị cốt lõi: - Kỷ luật hướng vào tính chuyên nghiệp; - Hoàn thiện tổ chức hướng tới dịch vụ hàng đầu; - Năng động hướng tới tính sáng tạo tập thể; - Cam kết nội bộ và với cộng đồng, xã hội; - Làm việc và hành động trung thực, nhiệt tình và gần gũi với khách hàng. Tất cả giá trị đó sẽ đem lại cho Quý khách một sự an tâm và thấy được những gì chúng tôi có và có thể mang lại.
Tóm tắt Giới thiệu từ Ban tổ chức.

Kinh nghiệm và nghiệp vụ của chúng tôi?

Mặc dù mới thành lập không lâu, xong chúng tôi là tổng hợp của nhiều cá nhân có rất nhiều kinh nghiệm trong lĩnh vực kỹ thuật và tự hào rằng chúng tôi tiếp cận với các công nghệ hiện đại một cách chủ động và khoa học kết hợp với vốn hiểu biết và kinh nghiệm nhiều năm trong nghề, do vậy chúng tôi tin tưởng có thể mang lại cho Quý khách một chất lượng phục vụ tốt nhất! Mong tiếp tục nhận được sự hưởng ứng của Quý khách!
Lời giới thiệu từ Ban kỹ thuật MHT
Hiển thị các bài đăng có nhãn Thủ thuật. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Thủ thuật. Hiển thị tất cả bài đăng

Bảo mật tài khoản FTP với giao thức SFTP (SSH FTP)

Bảo mật tài khoản FTP với giao thức SFTP (SSH FTP) :


Nếu bạn là Webmaster có một Hosting thì chắc chắn bạn sẽ gặp phải một vấn đề đó là: bảo mật cho đường truyền FTP. Đây luôn được xem là một vấn đề không hề nhỏ vì bất cứ hacker có khả năng nào cũng có thể dễ dàng lấy được tài khoản FTP của bạn và truy suất dữ liệu trên đó.
Nếu bạn đang thực sự lo ngại về bảo mật của trang web của bạn thì tốt nhất thay vì sử dụng giao thức FTP bạn nên chuyển qua sử dụng SFTP (SSH File Transfer Protocol). Khi bạn được kết nối qua SFTP, tất cả các dữ liệu của bạn sẽ được mã hóa giúp cho hacker không thể tiếp cận với chúng.
Trong phạm vi bài viết này chúng tôi sẽ hướng dẫn bạn kết nối với một web host thông qua giao thức SFTP. Tuy nhiên bạn nên lưu ý là không phải web host nào cũng hỗ trợ giao thức này.
Hiện nay có rất nhiều trình FTP Client hỗ trợ giao thức SFTP, ở đây tôi sử dụng Filezilla client – một phần mềm hoàn miễn phí và rất dễ sử dụng. Sau khi tải về và cài đặt bạn chạy ứng dụng này và bấm vào biểu tượng đầu tiên trên thanh công cụ hoặc vào File->Site Manager
Bảo mật tài khoản FTP SFTP 01

Bấm vào New Site để tạo một kết nối mới. Ở cửa sổ tiếp theo bạn nhập vào các thông tin của Acc để tiến hành kết nối với Web Host.
Bảo mật tài khoản FTP SFTP 02


Ở mục Servertype bạn chọn là SFTP – SSH File Transfer Protocol
Sau khi đã có đầy đủ thông tin bạn bấm Connect để tiến hành kết nối với tài khoản FTP của bạn thông qua giao thức SFTP. Có thể bạn sẽ gặp một cửa sổ thông báo, hãy bấm OK để tiếp tục:

Bảo mật tài khoản FTP SFTP 03


Xa hơn nữa bạn có thể sử dụng một Key xác thực để tiến hành kết nối thông qua giao thức SFTP. Với Key này khi đăng nhập vào tài khoản bạn không cần phải sử dụng mật khẩu và có thể loại bỏ hầu hết các nguy cơ tấn công qua SSH. Để làm việc này bạn làm như sau:
- Đăng nhập vào cPanel của bạn, di chuyển xuống cho phía dười và bấm chọn vào biểu tượng SSH/Shell Access:

Bảo mật tài khoản FTP SFTP 04



- Tiếp tục chọn vào Manage SSH keys



- Chọn vào Generate a new key

Bảo mật tài khoản FTP SFTP 05


- Trong cửa sổ tiếp theo bạn nhận vào tên Key và Password để tiến hành tạo Key, bạn nên sử dụng tính năng Generate để có một mật khẩu ngẫu nhiên với độ bảo mật cao nhất. Lưu ý: Bạn hãy lưu lại mật khẩu này phòng khi cần tới ở các bước sau.

Bảo mật tài khoản FTP SFTP 06


- Quay lại màn hình chính bạn sẽ thấy Key bạn vừa tạo, hãy bấm vào Manage Authorization để cung cấp quyền truy cập cho key này.


Bảo mật tài khoản FTP SFTP 07


- Sau đó hãy quay lại màn hình này và chọn vào Download để tải về Private Key của bạn. Việc cuối cùng bạn phải làm là Add key đó vào trình FTP Client, với Filezilla thì bạn vào Edit->Settings

Bảo mật tài khoản FTP SFTP 08


Ở đây hãy chọn vào Add key File để thêm Private Key vào, nếu Filezilla yêu cầu bạn Convert định dạng thích hợp cho nó thì bạn chỉ cần nhập mật khẩu khi tạo key và bấm OK là được. Cuối cùng bấm OK lần nữa để đóng cửa sổ này lại.
Ngay lúc này bạn có thể quay đăng nhập vào tài khoản FTP của bạn mà không cần phải có mật khẩu truy cập.
Chúc bạn thành công.
    Thái   

Tạo khung hình cho ảnh trên Blog

Tạo khung hình cho ảnh trên Blog thế nào?


Nhiều bạn muốn tạo Khung hình cho ảnh thì tôi xin hướng dẫn nè: 


.khunghinh {
 float: left;
 background: url(http://www.uytinnhat.com/thu-vien/blogspot/images/shadow.gif) no-repeat bottom   right;
margin: 5px; 
}
.anh {
 float: left;
 background-color: #FFFFFF;
 border: 1px solid #a9a9a9;
 padding: 12px;
 position: relative;
 left: -5px;
 top: -5px;
}



Khi vào trong bài viết, ví dụ bạn có một cái file ảnh có link như thế này :http://www.uytinnhat.com/thu-vien/blogspot/images/my_avatar.jpg thế này: 





Thì khi cho vào blog, hãy dùng code HTML sau khi viết blog : 



<div class="khunghinh">
         <div class="anh">
                  <img src="http://www.uytinnhat.com/thu-vien/blogspot/images/my_avatar.jpg" border="0"  />
          </div>
</div>

Chúc bạn thành công!
 Thái  
Kết quả nè:


Tạo hiệu ứng bo tròn góc bằng CSS

class="round-content"> CSS là một trong những ngôn ngữ lập trình rất được ưa chuộng vì sự đơn giản, gọn nhẹ, dễ sử dụng và tương thích với nhiều nền tảng web khác nhau. Nếu bạn viết blog hay xây dựng 1 trang web chắc chắn bạn muốn blog của mình trở nên đẹp hơn , nếu chỉ dùng những khối vuông blog trở nên đơn điệu , CSS có thể giúp bạn bo tròn góc bằng code rất đơn giản sau đây :


#round {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;

width:250px;
background:#eeeeee;
border-color:#DEDEDE;
}
.round-content {
padding: 10px;
}

Vậy là bạn đã thiết lập được hiệu ứng này.
Để sử dụng hiệu ứng bo tròn, bạn dùng cú pháp sau :



<div id="round" class="round-content">
Nội dung
</div>


2 dòng code màu vàng sẽ thiết lập mặc định bo tròn tất cả 4 góc
Nếu bạn chỉ muốn bo tròn từng góc riêng biệt, hãy thay thế nó bằng các cặp code dưới đây :


Bo tròn góc trái bên trên.
-moz-border-radius-topleft:10px;
-webkit-border-top-left-radius:10px;


Bo tròn góc phải bên trên.
-moz-border-radius-topright:10px;
-webkit-border-top-right-radius:10px;


Bo tròn góc trái bên dưới.
-moz-border-radius-bottomleft:10px;
-webkit-border-bottom-left-radius:10px;


Bo tròn góc phải bên dưới.
-moz-border-radius-bottomright:10px;
-webkit-border-bottom-right-radius:10px;


Với thông số màu hồng, nó sẽ thiết lập chiều rộng của khung được bo tròn. Bạn chỉ việc chỉnh lại sao cho vừa với kích thước của Blog (VD: 100px, 200px ...) hoặc để chế độ tự động canh (
width:auto;).

Bạn có thể tạo nhiều lần đoạn mã ở bước 2 (cần đặt thêm số thứ tự round1, round2 ... để không trùng nhau) với nội dung tùy chỉnh nếu muốn. Và khi sử dụng, hãy nhớ đổi tên id trong cú pháp nhé!

Vậy là xong rồi đấy. Hy vọng chút thủ thuật nhỏ này sẽ giúp bạn làm đẹp thêm cho Blog của mình. Thân !

Những điều cần lưu ý khi chèn links vào bài viết - SEO



Những điều cần lưu ý khi chèn links vào bài viết trong khi SEO
Đoạn text dùng trong link đến site (gọi là anchor text) có ảnh hưởng rất quan trọng đến vị trí xếp hạng của website trên trang kết quả tìm kiếm của Google.


Ví dụ, nếu nhiều người dùng text “buy blue widgets” để link đến site của bạn, thì nhiều khả năng site của bạn sẽ có thứ hạng cao khi người dùng tìm kiếm với cụm từ “buy blue widgets” trong kết quả tìm kiếm của Google.
Link text hay còn gọi là anchor text là đoạn văn bản được dùng để hiển thị link. Ví dụ:
HTML Code:<a href="http://www.example.com">xyzt abc</a> xyzt abc là link text (hay anchor text)
HTML Code:
<a href="http://www.example.com" rel="nofollow">great keyword</a>
HTML Code:
<a href="http://www.example.com ">great keyword</a>
HTML Code:
<a href="http://www.example.com/page.htm">great keyword</a>
HTML Code:
<a href="http://www.example.com">This</a> is an example.
The link text <a href="http://www.example.com">great keyword</a> will be ignored by Google.
HTML Code:
<a href="http://www.example.com/page1.htm">This</a> is an example.
The link text <a href="http://www.example.com/page2.htm">great keyword</a> will be ignored by Google.
Nhưng trong nhiều trường hợp link text không được sử dụng. Hãy kiểm tra tất cả các link của bạn để chắc chắn rằng link text sẽ được Google sử dụng
1. Thuộc tính nofollow
Những link có thuộc tinh rel=”nofollow” Google sẽ không sử dụng link text. Ví dụ:
Bạn có thể kiểm tra link bằng cách view source hoặc bằng một số công cụ như IBP
2. Trong URL có ký tự đặc biệt
Nếu trong URL có những ký tự đặc biệt Google sẽ không thể index link đó đúng được. Ví dụ:
Trong ví dụ trên có một dấu trắng (space) ở cuối URL. Một số webmaster phát hiện ra rằng Google sẽ không nhận link text nếu link có dấu trắng ở đâu hoặc cuối URL.
Chú ý rằng hầu hết các trình duyệt có thể tự sửa lỗi link và nó sẽ hoạt động bình thường trên trình duyệt. Tuy nhiên search engine spider có vẻ khó tính hơn với các link không chuẩn (hoặc có thể đánh giá thấp link này)
3. Link sử dụng 301 redirect
Matt cutts mới đây đã khẳng định rằng Google bỏ qua những anchor text sử dụng 301 redirect. Ví dụ:
Khi vào page http://www.example.com/page.htm server redirect đến trang http://www.example.com bằng 301. Trong trường hợp này google sẽ bỏ qua link text “great keyword”
4. Trong một trang (page) chỉ một link được chấp nhận
Nếu một trang có 2 link cùng đến một URL google sẽ chỉ sử dụng text link của link đầu tiên và bỏ qua link text của link thứ 2. Ví dụ:
Link thứ nhất và link thứ 2 đều trỏ đến URL http://www.example.com, vì vậy google chỉ lấy link text của link đầu tiên tức là từ “This” còn cum từ “great keyword” sẽ bị bỏ qua. Nhưng nếu 2 link cùng trỏ đến 1 domain nhưng URL khác nhau thì Google sẽ sử dụng cả 2 link text. Ví dụ:

Links là yếu tố quan trọng nhất để bạn đạt thứ hạng cao trên Google và search engine khác. 

Virtuamart SEO 2 : Google Analytics & Meta Tag

Virtuamart SEO 2 : Google Analytics & Meta Tag



Trong bài trước Virtuamart SEO 1, mình đã giới thiệu một số thủ thuật về tránh duplicate content, SEF URL và Sitemap. Hôm nay mình viết nốt phần 2, trong phần này mình sẻ giới thiệu cách gắng google analytics cho VM và việc sử dụng các thẻ meta tag.

1. Google Analytics:

Nói đến công cụ này, chắc ai cũng biết nó là công cụ tracking theo dỏi website phổ biến nhất hiện nay. Cũng có một số nhà cung cấp khác như Mybloglog hay Tracking shot ... nhưng Google analytics vẫn là công cụ tốt nhất có trên thị trường và đặc biết là nó đến từ google.
Để gắng code track của google analytics cho website Joomla thì rất đơn giản, những để google analytics tracking được VM là một chuyện khác. Vì lý do VM là một com khá rộng, sử dụng cấu trúc database riêng (cấu trúc này còn lớn hơn của Joomla nguyên bản) nên google không thể thống kê được vào tầng sản phẩm của VM. Giới hạn thống kê của google analytics chỉ đến được tới phần catalog củaVM chứ không thể thống kê được vào tầng sản phẩm.

Giải Pháp:

Chúng ta bắt buộc sải sử dụng thêm một module, nói đúng hơn là 1 plugin để sử lý việc này.
Ở đây mình có 2 modules là :
  1. Google Analytics w/ auto SSL : công cụ này sử dụng khá tốt, nhưng có điều chỉ support Joomla 1.0x
  2. Google Analytics Tracking Module : công cụ này sài cũng khá ok, và support 1.5x
bạn nào có module nào hay hơn thì share với nhá..^^

2. Meta Tag

Phần meta tag quan trọng như thế nào với việc tiến hành chiến dịch làm SEO thì có lẽ mình không cần phải giới thiệu thêm.
Vấn đề của Virtuamart là không có hỗ trợ meta tag cho các catalog và sản phẩm. Nên rất khó để các catalog của VM có thể ranking cao trên google search result page.

Giải pháp:

Trong trường hợp này mình sử dụng Simple SEO Plugin như một hình thức chữa cháy, vì hiện tại trên forum của VM cũng chăng có cách nào khác phục vấn đề này.
Để việc sử dụng simple SEO có hiệu quả, các bạn cần cố gắng thêm phần description vào phàn mô tả sản phẩm và catalog. Nếu không muốn phần description này hiện thị trong trang sản phẩm các bạn có thể can thiệp vào file flypage và browser để xóa nó đi.
Về phần Simple SEO, bạn kích hoạt chức năng quyét nội dung trên page để sử dụng làm description nữa là ok
Chúc may mắn,

Virtuemart SEO 1 : Duplicate, SEF url và Sitemaps

Virtuemart SEO 1 : Duplicate, SEF url và Sitemaps


Trong thế giới website mã nguồn mở Joomla thì chẳc hẳn mọi người đều biết đến VirtueMart (VM), một mã nguồn mở thông dụng nhất trong việc phát triển website thương mại điện tử. Virtuemart cho phép chúng ta xây dựng gian hàng, cập nhật sản phẩm, thanh toán online... và rất nhiều ứng dụng khác nữa. Ở Việt Nam đã có rất nhiều website bán hàng trực tuyến sử dụng VirtueMart, và VM cũng là component được đưa ra thảo luận nhiều nhất trên cá diễn đàn chuyên về Joomla Open Source.
Tuy là một mã nguồn được sử dụng nhiều nhất hiện nay, nhưng khả năng tối ưu hóa để phát triển SEO của VM là rất thấp và hầu như không có. Vì vậy khi muốn làm SEO cho website có sử dụng VM, bạn cần phải có một số thủ thuật nhỏ và sử dụng thêm một số phần mở rộng để có thể tối ưu hóa VM cho search engine. Với bài viết này SEO Việt Nam hy vọng sẻ có thể giải quyết phần nào những vấn đề về SEO cho VM mà các bạn thường hay gặp phải, rất mong nhận được sự đóng góp từ các bạn.
Bài viết này sẻ là bài viết thứ nhất về chủ đề Virtuemart SEO, bao gồm 3 phần là: duplicate content, SEF Url và Sitemaps. Bài viết tiếp theo sẻ đề cập đến vấn đề của Google Analytics và Meta Tag cho Virtuemart.

1. Duplicate Content trong Virtuemart:

Duplicate là một vấn đề làm nhức đầu nhất trong SEO, đặc biết là đối với những website sử dụng VM. Cấu trúc của VM cho phép hiệu chỉ các flypage và browse cho từng thư mục và sản phẩm, chính vì thế các bạn sẻ có thẻ có từ 4 đến 5 URL có cùng một nội dung
Một ví dụ cho dễ hiểu, với mỗi sản phẩm bạn sẻ có ít nhất 3 url kiểu như sau:

Vào thẳng Products:

http://demo.virtuemart.net/?page=shop.product_details&flypage=flypage.tpl&product_id=10&category_id=2&option=com_virtuemart

Module sản phẩm mới nhất:

http://demo.virtuemart.net/?page=shop.product_details&category_id=2&flypage=flypage.tpl&product_id=10&option=com_virtuemart

Tùy chọn view với Flypage:

http://demo.virtuemart.net/?page=shop.product_details&product_id=10&category_id=2&flypage=flypage.tpl&option=com_virtuemart Bạn có thể không hiểu tại sao lại như vậy, rất đơn giản là cả 3 url có cùng kết quả những khác cách sắp xếp
  1. Layout / Product ID / Category ID
  2. Category ID / Layout / Product ID
  3. Product ID / Category ID / Layout

Cách giải quyết vấn đề Duplicate URL với VM:

Kiểm tra kĩ những mặc định flypage và browse cho catalog hay view sản phẩm, cái nào ok thì sài còn lại xóa hết đi ^^.
Check lại các module sử dụng đẻ hiển thị sản phẩm, theo quan xát cua mình thì chỉ có cái top ten porducts là hoạt động tốt, còn mấy cái kia hình như có vấn đề.
Sử dụng canonical plugin

2. SEF url cho Virtuemart:

Điều này chắc không cần phải nói nhiều nữa, hiện nay trên thị trường đang có 3 SEF component để các bạn lựa chọn là:
  1. Sh404sef: Miễn phí và có hỗ trợ VM, nhưng đôi khi có một số vấn đề trong url với việc show sản phẩm ở trang 2 trở đi.
  2. Artio SEF: Component thì miễn phí những plugin cho VM thì phải mua, mà mình ko có tiền mua nên chưa có test.
  3. SEF advance: 40$ thì phải, nhưng được cái sài ngon với nhiều component.
Minh thì khuyến khích sử dụng sh404, vì nó free tốt cho người việt nam ^^. Vả lại sh404 chỉ cho phép tồn tại 1 url trong 1 trang, còn JoomSEF và SEF advance thì ko, 2 thằng này có thể cho multible url nên nếu ai sử dụng thì phải chú ý dùng robots.txt để hạn chế nó đi nhé.

3. Sitemaps cho VirtueMart:

Ở phần này có 3 lựa chọn là :
  1. Xmap: cái này free, sài tốt chỉ có điều ko hỗ trợ sh404 nên phải có 1 chút thủ thuật nữa thì nó mới chịu.
  2. SEF Service Map : cái này dùng khá tốt, hộ trợ luôn .txt để làm sitemap cho Yahoo. Nhược điểm là chỉ sìa được cho 1.0x
  3. JoomMap: Cài này dùng cũng ok với các website, những không phai là VM. Vì nó chỉ liệt kê được tầng thư mục vủa VM chứ ko liệt kê hết được các sản phẩm.
Các bạn nên sử dụng Xmap, vì mình đã và đang sử dụng nó, rất tốt hàng thuộc loại ngon bổ rẽ ^^

Bài viết này mình đã nhặt trên mạng nhằm phục vụ cho ai muốn nghiên cứu vấn đề này, ai Test rồi thì để lại Nhận xét Kết quả nhé!

Bài viết số 2 về SEO Virtuemart sẻ là về vấn đề Google Analytics và Mata Tag. Xem tại: Virtuamart-seo-2

Hướng dẫn sửa lỗi pagination khi sử dụng chung sh404sef và virtuemart trong Joomla

Hướng dẫn sửa lỗi pagination khi sử dụng chung sh404sef và virtuemart trong Joomla


Phần sản phẩm sử dụng sh404sef và virtuemart mỗi khi sang trang 2 của trang sản phẩm là không thể nào quay về trang 1 được. Dạo trước cũng có nhiều bạn hỏi mình về các vấn đề như thế này nhưng mà dạo ấy không có quan tấm đến VM nhiều nên cũng không biết phải sử lý ra sao.
Hiện tại mình đã tìm ra cách giải quyết vấn đề này nên đăng lên cho các bạn cùng tham khảo. Ở đây chúng ta có 2 cách sử lý một là can thiệp và code, 2 là update bản mới nhất và tinh chỉnh trong configuration. Với cấu trúc của sh404sef và Virture Mart thì rất khó để can thiệp vào code của nó nên mình khuyên cáo các bạn nên sử dụng cách update và tinh chỉnh trong configuration của sh404sef.

Cách thứ 1: Update + Configuration setup:

- Việc đầu tiên bạn cần làm là update lên phiên bản joomla mới nhất hiện tại là 1.5.14, sh404sef mới nhất, và virtue mart mới nhất hiện tại là 1.1.3.
- Bước thứ 2, bạn vào sh404sef / Configuration / Plugin :
trong phần này bạn để ý đến phần Plugin cho Virtue Mart, chọn Yes cho ứng dụng “Using Items per page drop-down list
- Bước cuối cùng là save lại và xóa cache của sh404sef đi là song !
Nếu thức hiện theo cách này thì url của bạn sẽ được chuyển thành:
Domain.com/parts/Page-1-50.html
Domain.com/parts/Page-2-50.html
Domain.com/parts/Page-3-50.html
đấy là trong trường hợp bạn chỉnh cho hiện thị 50 sản phẩm trên 1 trang, nếu bạn chỉ cho hiển thị 10 hoặc 20 sản phẩm thì số 50 ở url trên sẽ chuyền thành số tương ứng.

Cách thứ 2: Can thiệp vào code:

Mở file component/com_sh404sef/sef_ext/com_virtuemart.php
Thêm đoạn code sau đây vào sau biến if (!function_exists('vmSefGetProductName'))


// Detect where a menu item with a non-standard Itemid is being processed and simulate a VM internal 'menu' item to facilitate pagination
global $sess;
if( !isset($sess) ) {
require_once( JPATH_ROOT.DS.'components'.DS.'com_virtuemart'.DS.'virtuemart_parser.php' );
}
$vm_Itemid = $sess->getShopItemid();
// Check whether the Itemid is the usual value for a VM menu item
if( $Itemid != $vm_Itemid ) {
// The URL is based on a menu item other than the standard VM menu item (usually the home page)
// VM always uses the standard VM Itemid value in pagination URLs and so this URL will be updated to
// use the standard Itemid and to incorporate any menu item parameters, in case pagination is appropriate.
$menu = & shRouter::shGetMenu();
$menuItem = $menu->getItem( $Itemid );
if( $menuItem ) {
// Get the menu parameter set
$menuparams =& new JParameter( $menuItem->params );
// Replicate the logic used by VM to assess whether a browse or product detail page required
$tmp_product_id = $menuparams->get( 'product_id' );
$tmp_category_id = $menuparams->get( 'category_id' );
// Get the page name and remove '.php', if present
$tmp_page = preg_replace('/\.php/', '', strtolower($menuparams->get( 'page' )));
if( !empty($tmp_product_id) ) {
$default_page = 'shop.product_details';
} else if( !empty($tmp_category_id) ) {
$default_page = 'shop.browse';
} else {
$default_page = '';
}
$tmp_page = empty($tmp_page) ? $default_page : $tmp_page;
// Check whether the menu item is a browse page or product detail page (other pages are excluded
$allowed_pages = array(
'shop.browse',
'shop.product_details',
);
if( in_array($tmp_page, $allowed_pages) ) {
// Clear down the unwanted get vars from the $shGETVars array
$required_params = array(
'option',
'lang',
);
global $shGETVars;
foreach( $shGETVars as $param ) {
if( !in_array($param, $required_params) ) {
unset($$param);
unset($shGETVars[$param]);
}
}
// Reset the Itemid
$Itemid = $vm_Itemid;
shAddToGETVarsList( 'Itemid', $Itemid );

// Replicate the logic used by VM to include specific parameter values
if( !empty($tmp_product_id) ) {
$product_id = $tmp_product_id;
shAddToGETVarsList( 'product_id', $product_id );
} else if( !empty($tmp_category_id) ) {
$category_id = $tmp_category_id;
shAddToGETVarsList( 'category_id', $category_id );
}
$tmp_flypage = $menuparams->get('flypage');
if( ( !empty($tmp_product_id) || !empty($tmp_category_id) ) && !empty($tmp_flypage) ) {
$flypage = $tmp_flypage;
shAddToGETVarsList( 'flypage', $flypage );
}
$page = $tmp_page;
shAddToGETVarsList( 'page', $page );
// Process any other menu parameters not already processed
$params = $menuparams->toArray();
// Exclude system parameters and those already processed
$excluded_params = array(
'product_id',
'category_id',
'flypage',
'page',
'page_title',
'show_page_title',
'pageclass_sfx',
'menu_image',
'secure',
);
// Process each parameter
foreach( $params as $param => $value ) {
if( !in_array($param, $excluded_params) && $value != '' ) { // Note empty() is not used here because zero is valid
$$param = $value;
shAddToGETVarsList( $param, $value );
shRemoveFromGETVarsList( $param );
}
}
}
}
}

// Set the page number for browse pages, if not already set
if( !isset($limitstart) || !isset($limit) ) {
$my_page = explode('.', $page);
$pagename = isset($my_page[1]) ? $my_page[1] : '';
if( $pagename == 'browse' ) {
global $vm_mainframe, $mosConfig_list_limit;
if( !isset($limitstart) ) {
// VM stores a different default limitstart value for each different browse page. That value must be identified so that the URL
// is created for the expected page
// Store the 'current value' of limitstart so that it can be restored later
$save_limitstart = vmRequest::getVar('limitstart');
// Setting the 'current value' to null allows the stored value (if any) to be retrieved without it being overwritten by a
// 'current value' that is usually not applicable to that particular browse page
vmRequest::setVar( 'limitstart', null );
// Force a consistent value for category_id when empty
$category_id = empty($category_id) ? 0 : $category_id;
$limitstart = (int)$vm_mainframe->getUserStateFromRequest( "view{$keyword}{$category_id}{$pagename}limitstart", 'limitstart', 0 );
shAddToGETVarsList( 'limitstart', $limitstart );
// Restore the original 'current value' of limitstart
vmRequest::setVar( 'limitstart', $save_limitstart );
}
if( !isset($limit) ) {
// No need to save and restore values here because VM only uses one value globally
$limit = (int)$vm_mainframe->getUserStateFromRequest( "viewlistlimit{$page}", 'limit', $mosConfig_list_limit );
shAddToGETVarsList( 'limit', $limit );
}
}
}

// Ensure that $limitstart is a multiple of $limit (this can occur if $limit was changed since $limitstart was set)
if( isset($limitstart) && $limit > 0 ) {
$limitstart = floor($limitstart/$limit)*$limit;
shAddToGETVarsList( 'limitstart', $limitstart );
}


Bước 2: Vào Configuration của sh404sef làm tương tự như cách 1 đã làm.

Bước 3: Save lại và delete cache của sh404 đi là ok.

Hy vọng rằng bài viết này sẽ giúp ích được cho nhiều bạn, có thắc mắc xin để lại comment, mình sẽ cố gắng giải đáp. 

Bài viết này vì mục đích chia sẻ kiến thức Mr.Thái sưu tập trên mạng để up lên đây cho các bạn nghiên cứu, chưa có Test thử. 
Ai Test thử rồi thì để lại tin nhắn kết quá nhé!

MENU SẢN PHẨM


 
Máy tính Xách tay  
Máy tính Để bàn  
Máy chiếu - Projector  
Máy chủ - Server
Thiết bị Văn phòng
Linh kiện Văn phòng
Linh kiện Laptop
Linh kiện máy bàn
Thiết bị mạng
     
Thiết bị lưu trữ
Thiết bị Quan sát
Máy ảnh Kỹ thuật số
Phần mềm
Thiết kế Web
Dịch vụ Công ty
HỖ TRỢ TRỰC TUYẾN

SẢN PHẨM NỔI BẬT