Complete Domain-Driven Architecture migration: - Phase 1-4: Transport, ProductSet, Coupon, Shop, Search, Basket, ProductCustomField, Category, ProductAttribute, Promotion - Phase 5: Order (~562 lines) + Product (~952 lines) - ~20 Product methods migrated to ProductRepository - Apilo sync migrated to OrderAdminService - Production hotfixes: stale Redis cache (prices 0.00), unqualified Product:: refs in LayoutEngine, object->array template conversion - AttributeRepository::getAttributeValueById() Redis cache added Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
75 lines
2.1 KiB
PHP
75 lines
2.1 KiB
PHP
<? global $lang_id; ?>
|
|
<? if ($this->query) : ?>
|
|
<div class="box-title">
|
|
<?= \Shared\Helpers\Helpers::lang('wyniki-wyszukiwania-dla-zapytania') . ': <strong>' . $this->query . '</strong>'; ?>
|
|
</div>
|
|
<? endif; ?>
|
|
<?
|
|
if ($this->category_additional_text) :
|
|
echo \Shared\Tpl\Tpl::view('shop-category/_partials/category-additional-text', [
|
|
'category' => $this->category
|
|
]);
|
|
endif;
|
|
?>
|
|
<div class="category-content">
|
|
<? if (is_array($this->products)) : foreach ($this->products as $product_id) :
|
|
echo \Shared\Tpl\Tpl::view('shop-product/product-mini', [
|
|
'product' => (new \Domain\Product\ProductRepository($GLOBALS['mdb']))->findCached( $product_id, $lang_id )
|
|
]);
|
|
endforeach;
|
|
endif; ?>
|
|
</div>
|
|
<?
|
|
if ($this->category_description) :
|
|
echo \Shared\Tpl\Tpl::view('shop-category/category-description', [
|
|
'category' => $this->category
|
|
]);
|
|
endif;
|
|
?>
|
|
<script type="text/javascript" class="footer">
|
|
$(document).ready(function() {
|
|
let offset = 0;
|
|
const limit = 8;
|
|
let isLoading = false;
|
|
const $categoryContent = $('.category-content');
|
|
|
|
function loadProducts() {
|
|
if (isLoading) {
|
|
return;
|
|
}
|
|
|
|
isLoading = true;
|
|
$.ajax({
|
|
type: 'POST',
|
|
cache: false,
|
|
url: '/shopProduct/lazy_loading_products',
|
|
data: {
|
|
offset: offset,
|
|
category_id: <?= $this -> category['id'] ?>
|
|
},
|
|
beforeSend: function() {
|
|
|
|
},
|
|
success: function( response ) {
|
|
response = jQuery.parseJSON( response );
|
|
if ( response.html.length > 0 ) {
|
|
$categoryContent.append( response.html );
|
|
offset += limit;
|
|
isLoading = false;
|
|
} else {
|
|
$( document) .off( 'scroll', checkScroll );
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function checkScroll() {
|
|
if( $(window).scrollTop() >= $('.category-content').offset().top + $('.category-content').outerHeight() - window.innerHeight - 250 ) {
|
|
loadProducts();
|
|
}
|
|
}
|
|
|
|
$( document ).on( 'scroll', checkScroll );
|
|
loadProducts();
|
|
});
|
|
</script>
|