Thứ Ba, 29 tháng 9, 2026

Div contain Background size as image width and height - SOLVED

Thẻ div sử dụng background image. Để background không bị biến dạng và vẫn sử dụng image đó, tiến hành set padding-bottom % theo tỉ lệ.

[imgHeight/imgWidth] % 

div.contain{
padding:0;
padding-bottom:66%; 
}



 

Thứ Tư, 5 tháng 8, 2026

Cách xử lý Cron job hacked - Joomla - SOLVED

 1. Backup all site 
2. Scan source Code, scan database
 3. Cron Jobs: check and remove each job. 
Beware: cron job backup site or statistics 
Đối với site thông thường thì Cron Job là trống không có cái nào


 

Thứ Sáu, 3 tháng 7, 2026

Wordpress backup site to localhost plugin Duplicator dễ dàng

 Để backup và restore Wordpress site bằng plugin Duplicator miễn phí, sau khi tạo ra file .zip có hể download hoặc di chuyển qua host khác. Tiến hành install là hoàn thành.

 Plugin Back up khác WP All In One


 

Thứ Ba, 30 tháng 6, 2026

Scan all file joomla 5 by RSFirewall

 


Thứ Ba, 23 tháng 6, 2026

Upgrade j4 to j5 error JMapTable::_getNode(1, id) failed SOLVED

Phát hiện lỗi: khi upgrade joomla 4 lên joomla 5, lưu article xuất hiện lỗi

Save failed with the following error: Joomla\Component\Finder\Administrator\Table\MapTable::_getNode(1, id) failed. 

 Giải pháp: sử dụng phpmyadmin INSERT INTO `#_finder_taxonomy` (`id`, `parent_id`, `title`, `state`, `access`, `lft`, `rgt`) VALUES (1, 0, 'ROOT', 1, 1, 0, 1);

 Nguyên nhân table #_finder_taxonomy thiếu 1 record không có dữ liệu ROOT

 


 


Thứ Sáu, 1 tháng 5, 2026

2026 XAMPP upgrade PHP 8.2 to PHP8.5 The simplest way - SOLVED



Link test php XAMPP local: https://localhost/dashboard/phpinfo.php
1. Rename php to php_old
2. Download PHP8.5 from: https://www.php.net/downloads
3. Unzip and rename folder
4. Copy php.ini from php_old to new
5. Copy extras from php_old to new

The simplest solution
Check and good luck


 

XAMPP 3.3.0 SET FOREIGN_KEY_CHECKS = ON #2006 - MySQL server has gone away - SOLVED

XAMPP 3.3.0

SET FOREIGN_KEY_CHECKS = ON;

#2006 - MySQL server has gone away

Open mysql.ini
[mysqld]
max_allowed_packet=1M -> max_allowed_packet=32M 

 




Thứ Bảy, 14 tháng 3, 2026

Font awesome fa-twitter to 𝕏 the fastest solution - SOLVED

All version font awesome 


 

Change <i class="fa fa-twitter"></i> to 𝕏
Css change: 
.fa-twitter::before {
    content: "𝕏";
}


Thứ Ba, 24 tháng 2, 2026

Joomla5 upgrade com_weblinks install


 

 
 
Description: com_weblinks joomla 5 miss
Solution: administrator, system, extenstion, Install from web (filter 'weblinks' + 'All versions')
Install normal 

Thứ Hai, 23 tháng 2, 2026

Upgrade joomla 3.8 to J5 MB_OVERLOAD_STRING - SOLVED

 

Detail: joomla 3.8 PHP 7.4, run PHP 8.x error MB_OVERLOAD_STRING


Solution: uprgade joomla 3. 8 to joomla 3.10 (compatible PHP8.x)

Step upgrade: upgrade 3.10 to 4.x, 4.x to 5.x (all compatible PHP 8.x)

Thứ Sáu, 6 tháng 2, 2026

Joomla5 pagination miss style - Easy solution - SOLVED


Add custom style to css 

/*pagination*/
ul.pagination {
    list-style: none;
    margin: 0;
    padding: 0;
    text-align: center;
}
ul.pagination li {
    display: inline-block;
    margin: 5px;
}
.icon-angle-double-left::after {
    content: 'Start';
}
.icon-angle-left::after {
    content: 'Prev';
}
.icon-angle-right::after {
    content: 'Next';
}
.icon-angle-double-right::after {
    content: 'End';
} 

Thứ Ba, 11 tháng 11, 2025

Wordpress Duplicator plugin

 This is the easiest way backup and move site

Thứ Năm, 6 tháng 11, 2025

Rsform email signature blank - SOLVED

Joomla5, rsfrom 
Detail: Email contain signature image blank
Reason: image is transparent
Solution: <div style="background-color: #333;">{signature:signature_image}</div>

 


Thứ Tư, 29 tháng 10, 2025

Joomla5 PHP version error mysqli extenstion not available - SOLVED




Joomla 5, goddady PHP 8.4 
Error: install site not work, check site local SUCCESS, upload goddady error. Configuration 'debug=true' view error
Step check:
1. Change PHP version: 8.1, 8.2, 8.3, 8.4. (may be each version PHP sett extension different)
2. Try PHP 8.4. CPANEL PHP select option check box 'mysqli'

Thứ Năm, 18 tháng 9, 2025

joomla5 Duplicate entry '2-479' for key 'PRIMARY'

Detail: open article save error, save again SUCCESS

Save 1: view error  Duplicate entry '2-479' for key 'PRIMARY'

Save 2: SUCCESS 

This relate table #_finder_links_terms và #_finder_terms. User phpmyadmin empty (clean records)

SOLVED 


 

Thứ Năm, 11 tháng 9, 2025

Reaching 700 projects

 


Thứ Sáu, 29 tháng 8, 2025

joomla5 contact error 0-Content

Joomla5 live site

Local contact good work 
Upload to live host contact 0- content, debug:
Call to undefined method : Joomla\Plugin\System\Schemaorg\Extension\Schemaorg->onBeforeCompileHead

Check PHP version 8.3, 8.2, 8.1 the same issue.
Message focus Schemaorg plugin, search via internet not relate.
Try in luck: admin>configuration TURN OFF SEF url, then TURN ON again. 

Not sure why, may be relate configuration file when upgrade j4 to j5. 





Thứ Bảy, 9 tháng 8, 2025

Joomla5 module custom COM_MEDIA_ERROR_MISSING_DIR SOLVED

Error: add new module type 'Custom', error COM_MEDIA_ERROR_MISSING_DIR  
Solution: Admin system, plugins 'FileSystem - Local', disable/enable 

 



Thứ Tư, 12 tháng 3, 2025

J5 Article Save error Invalid parent ID


Detail: Joomla article, open article edit, -> Save failed with the following error: Invalid parent ID.
Solution: check 'Category', open and re-save category, check catetory parent


 

Thứ Tư, 26 tháng 2, 2025

Joomla 4,5: FRONTEND article Image upload miss style layout

Solution1 :
1. add custom css (below): some case template css j4,j5 not add Modal style -> upload layout style broken

Solution 2:
2. If use JCE : admin>component> JCE Profile > Default - Add group inside ( register)

May be require 2 solution the same my issue


CSS:

/*Modal*/
.modal {
  --modal-zindex: 1050;
  --modal-width: 500px;
  --modal-padding: 1rem;
  --modal-margin: 0.5rem;
  --modal-color: ;
  --modal-bg: var(--body-bg);
  --modal-border-color: var(--border-color-translucent);
  --modal-border-width: var(--border-width);
  --modal-border-radius: var(--border-radius-lg);
  --modal-box-shadow: var(--box-shadow-sm);
  --modal-inner-border-radius: calc(var(--border-radius-lg) - (var(--border-width)));
  --modal-header-padding-x: 1rem;
  --modal-header-padding-y: 1rem;
  --modal-header-padding: 1rem 1rem;
  --modal-header-border-color: var(--border-color);
  --modal-header-border-width: var(--border-width);
  --modal-title-line-height: 1.5;
  --modal-footer-gap: 0.5rem;
  --modal-footer-bg: ;
  --modal-footer-border-color: var(--border-color);
  --modal-footer-border-width: var(--border-width);
  position: fixed;
  top: 0;
  left: 0;
  z-index: var(--modal-zindex);
  display: none;
  width: 100%;
  height: 100%;
  overflow-x: hidden;
  overflow-y: auto;
  outline: 0;
}

.modal-dialog {
  position: relative;
  width: auto;
  margin: var(--modal-margin);
  pointer-events: none;
}
.modal.fade .modal-dialog {
  -webkit-transition: -webkit-transform 0.3s ease-out;
  transition: -webkit-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
  -webkit-transform: translate(0, -50px);
          transform: translate(0, -50px);
}
@media (prefers-reduced-motion: reduce) {
  .modal.fade .modal-dialog {
    -webkit-transition: none;
    transition: none;
  }
}
.modal.show .modal-dialog {
  -webkit-transform: none;
          transform: none;
}
.modal.modal-static .modal-dialog {
  -webkit-transform: scale(1.02);
          transform: scale(1.02);
}

.modal-dialog-scrollable {
  height: calc(100% - var(--modal-margin) * 2);
}
.modal-dialog-scrollable .modal-content {
  max-height: 100%;
  overflow: hidden;
}
.modal-dialog-scrollable .modal-body {
  overflow-y: auto;
}

.modal-dialog-centered {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  min-height: calc(100% - var(--modal-margin) * 2);
}

.modal-content {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  width: 100%;
  color: var(--modal-color);
  pointer-events: auto;
  background-color: var(--modal-bg);
  background-clip: padding-box;
  border: var(--modal-border-width) solid var(--modal-border-color);
  border-radius: var(--modal-border-radius);
  outline: 0;
}

.modal-backdrop {
  --backdrop-zindex: 1040;
  --backdrop-bg: hsl(0, 0%, 0%);
  --backdrop-opacity: 0.5;
  position: fixed;
  top: 0;
  left: 0;
  z-index: var(--backdrop-zindex);
  width: 100vw;
  height: 100vh;
  background-color: var(--backdrop-bg);
}
.modal-backdrop.fade {
  opacity: 0;
}
.modal-backdrop.show {
  opacity: var(--backdrop-opacity);
}

.modal-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  padding: var(--modal-header-padding);
  border-bottom: var(--modal-header-border-width) solid var(--modal-header-border-color);
  border-top-left-radius: var(--modal-inner-border-radius);
  border-top-right-radius: var(--modal-inner-border-radius);
}
.modal-header .btn-close {
  padding: calc(var(--modal-header-padding-y) * 0.5) calc(var(--modal-header-padding-x) * 0.5);
  margin: calc(-0.5 * var(--modal-header-padding-y)) calc(-0.5 * var(--modal-header-padding-x)) calc(-0.5 * var(--modal-header-padding-y)) auto;
}

.modal-title {
  margin-bottom: 0;
  line-height: var(--modal-title-line-height);
}

.modal-body {
  position: relative;
  -webkit-box-flex: 1;
      -ms-flex: 1 1 auto;
          flex: 1 1 auto;
  padding: var(--modal-padding);
}

.modal-footer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  padding: calc(var(--modal-padding) - var(--modal-footer-gap) * 0.5);
  background-color: var(--modal-footer-bg);
  border-top: var(--modal-footer-border-width) solid var(--modal-footer-border-color);
  border-bottom-right-radius: var(--modal-inner-border-radius);
  border-bottom-left-radius: var(--modal-inner-border-radius);
}
.modal-footer > * {
  margin: calc(var(--modal-footer-gap) * 0.5);
}

@media (min-width: 576px) {
  .modal {
    --modal-margin: 1.75rem;
    --modal-box-shadow: var(--box-shadow);
  }
  .modal-dialog {
    max-width: var(--modal-width);
    margin-right: auto;
    margin-left: auto;
  }
  .modal-sm {
    --modal-width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg,
  .modal-xl {
    --modal-width: 800px;
  }
}
@media (min-width: 1200px) {
  .modal-xl {
    --modal-width: 1140px;
  }
}
.modal-fullscreen {
  width: 100vw;
  max-width: none;
  height: 100%;
  margin: 0;
}
.modal-fullscreen .modal-content {
  height: 100%;
  border: 0;
  border-radius: 0;
}
.modal-fullscreen .modal-header,
.modal-fullscreen .modal-footer {
  border-radius: 0;
}
.modal-fullscreen .modal-body {
  overflow-y: auto;
}

@media (max-width: 575.98px) {
  .modal-fullscreen-sm-down {
    width: 100vw;
    max-width: none;
    height: 100%;
    margin: 0;
  }
  .modal-fullscreen-sm-down .modal-content {
    height: 100%;
    border: 0;
    border-radius: 0;
  }
  .modal-fullscreen-sm-down .modal-header,
  .modal-fullscreen-sm-down .modal-footer {
    border-radius: 0;
  }
  .modal-fullscreen-sm-down .modal-body {
    overflow-y: auto;
  }
}
@media (max-width: 767.98px) {
  .modal-fullscreen-md-down {
    width: 100vw;
    max-width: none;
    height: 100%;
    margin: 0;
  }
  .modal-fullscreen-md-down .modal-content {
    height: 100%;
    border: 0;
    border-radius: 0;
  }
  .modal-fullscreen-md-down .modal-header,
  .modal-fullscreen-md-down .modal-footer {
    border-radius: 0;
  }
  .modal-fullscreen-md-down .modal-body {
    overflow-y: auto;
  }
}
@media (max-width: 991.98px) {
  .modal-fullscreen-lg-down {
    width: 100vw;
    max-width: none;
    height: 100%;
    margin: 0;
  }
  .modal-fullscreen-lg-down .modal-content {
    height: 100%;
    border: 0;
    border-radius: 0;
  }
  .modal-fullscreen-lg-down .modal-header,
  .modal-fullscreen-lg-down .modal-footer {
    border-radius: 0;
  }
  .modal-fullscreen-lg-down .modal-body {
    overflow-y: auto;
  }
}
@media (max-width: 1199.98px) {
  .modal-fullscreen-xl-down {
    width: 100vw;
    max-width: none;
    height: 100%;
    margin: 0;
  }
  .modal-fullscreen-xl-down .modal-content {
    height: 100%;
    border: 0;
    border-radius: 0;
  }
  .modal-fullscreen-xl-down .modal-header,
  .modal-fullscreen-xl-down .modal-footer {
    border-radius: 0;
  }
  .modal-fullscreen-xl-down .modal-body {
    overflow-y: auto;
  }
}
@media (max-width: 1399.98px) {
  .modal-fullscreen-xxl-down {
    width: 100vw;
    max-width: none;
    height: 100%;
    margin: 0;
  }
  .modal-fullscreen-xxl-down .modal-content {
    height: 100%;
    border: 0;
    border-radius: 0;
  }
  .modal-fullscreen-xxl-down .modal-header,
  .modal-fullscreen-xxl-down .modal-footer {
    border-radius: 0;
  }
  .modal-fullscreen-xxl-down .modal-body {
    overflow-y: auto;
  }
}