View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002209 | OXID eShop (all versions) | 4.09. SEO, SEO URL | public | 2010-11-12 10:08 | 2012-12-10 13:35 |
Reporter | andreas_ziethen | Assigned To | |||
Priority | immediate | Severity | block | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | 4.4.4 revision 30554 | ||||
Fixed in Version | 4.4.5 revision 31315 | ||||
Summary | 0002209: removing products from category results in complete expire of SEO URLs - heavy performance issue | ||||
Description | In class ajaxComponent in file /admin/inc/category_main.inc.php there's a function removearticle() which is called each time you remove a product from a category via the admin ajax popup. This function at the end calls: $this->resetArtSeoUrl( $sAdd ); But: $sAdd is NOT defined! This results in a complete reset of ALL entries in table oxseo. This again results in massive performance problems in big shops. An immediate reset of 150.000 entries in OXSEO in a shop with heavy traffic does kill the database server for a while cause it results in thousands and thousands of write processes to oxseo table. I am not sure if this is the only place where this happens. It might be a good idea to check all the other calls of oxajax::resetArtSeoUrl() as well for the existance of the $aArtIds param. You could also do something like this: public function resetArtSeoUrl( $aArtIds ) { if( !is_array($aArtIds) && empty($aArtIds)) return; if ( !is_array( $aArtIds ) ) { $aArtIds = array( $aArtIds ); } foreach ( $aArtIds as $sArtId ) { oxSeoEncoder::getInstance()->markAsExpired( $sArtId ); } } | ||||
Tags | No tags attached. | ||||
Theme | |||||
Browser | All | ||||
PHP Version | any | ||||
Database Version | any | ||||
|
In addition: function resetArtSeoUrl() does actually exist twice: oxadminview::resetArtSeoUrl() = ajaxListComponent::resetArtSeoUrl() so take care to fix both ... - or even better: put it into a core class. ;-) |
|
Added additional checking to function oxajax::resetArtSeoUrl() and oxadminview::resetArtSeoUrl() - if passed parameter to function is empty, no call to oxSeoEncoder::markAsExpired() will be executed. |