* Easyshop is a web shop system */ include_once './core/item.class.php'; include_once './core/site_content.class.php'; include_once './core/structure.class.php'; include_once './core/manufacturer.class.php'; include_once './core/config.class.php'; include_once './core/itemhelper.class.php'; include_once './core/manufacturerhelper.class.php'; class website_dyncontent { private $base_object; private $layout_object; public function __construct($base_object, $layout_object) { $this->base_object = $base_object; $this->layout_object = $layout_object; } function run($structure_id) { $maincontent = ''; if ($structure_id) { $site_content_object = new SiteContent($this->base_object); $structure_object = new Structure($this->base_object); $this->layout_object->assign('structure_id', $structure_id); $site_content = $site_content_object->get_by_structure_id($structure_id); $structure_content = $structure_object->get_by_id($structure_id); if (isset($this->base_object->config->shopConfiguration['full_shop_name'])) { $shop_name = $this->base_object->config->shopConfiguration['full_shop_name']; } else { $shop_name = SHOP_SYSTEM; } $need_left_column = 0; // load content blocks if ($site_content) { foreach ($site_content as $block) { if ($block->activ == 1) { $need_left_column = 1; if ($block->type == 'article_list') { $maincontent .= $this->item_list($structure_id, $block); $need_left_column = 1; } elseif ($block->type == 'textbox') { $maincontent .= $this->textbox($structure_id, $block); $need_left_column = 1; } elseif ($block->type == 'slider') { $maincontent .= $this->slider($structure_id, $block); } elseif ($block->type == 'banner') { $maincontent .= $this->banner($structure_id, $block); } elseif ($block->type == 'manufacturers') { $maincontent .= $this->manufacturers($structure_id, $block); } elseif ($block->type == 'popular') { if (isset($this->base_object->config->shopConfiguration['popular_content_feature']) && $this->base_object->config->shopConfiguration['popular_content_feature'] == 2) { $maincontent .= $this->popular2($structure_id, $block); } else { $maincontent .= $this->popular($structure_id, $block); } } elseif ($block->type == 'substructure') { $maincontent .= $this->substructure($structure_id, $block); } } } } } if (!$need_left_column) { $this->layout_object->assign('site_type', 'full_width'); } return $maincontent; } private function popular($structure_id, $block) { $popular_items = ItemHelper::get_best_selling_items(3, $block->content); $popular_brands = ManufacturerHelper::get_best_selling_manufacturers(3, $block->content); $this->layout_object->assign('popular_items', $popular_items); $this->layout_object->assign('popular_manufacturers', $popular_brands); return $this->layout_object->_fetch('content_box_popular.tpl'); } private function popular2($structure_id, $block) { $popular_items = ItemHelper::get_best_selling_items(3, $block->content); $popular_brands = ManufacturerHelper::get_best_selling_manufacturers(10, $block->content); $this->layout_object->assign('popular_items', $popular_items); $this->layout_object->assign('popular_manufacturers', $popular_brands); return $this->layout_object->_fetch('content_box_popular2.tpl'); } private function substructure($structure_id, $block) { // Set configuration $config = array(); eval($block->configuration); $block->configuration = $config; if (isset($block->configuration['cat_id']) && is_numeric($block->configuration['cat_id'])) { $structure_id = $block->configuration['cat_id']; } // get substructures $structure_object = new Structure($this->base_object); if (isset($block->configuration['ebenen']) && is_numeric($block->configuration['ebenen']) && $block->configuration['ebenen'] > 1) { $substructures = $structure_object->get_structure_family($structure_id); $tpl = 'content_box_substructure_family.tpl'; } else { $substructures = $structure_object->get_subcategory_objects($structure_id); $tpl = 'content_box_substructure.tpl'; } $this->layout_object->assign('block', $block); $this->layout_object->assign('substructures', $substructures); $output = $this->layout_object->_fetch($tpl); return $output; } private function item_list($structure_id, $block) { $item_object = new Item($this->base_object); // Structure change if (!isset($_SESSION['lastStructureId']) || $_SESSION['lastStructureId'] != $structure_id) { unset($_SESSION['itemsPerPage']); unset($_SESSION['currentPage']); unset($_SESSION['currentManufacturer']); unset($_SESSION['listStyleType']); } $_SESSION['lastStructureId'] = $structure_id; // Manufacturer change if (isset($_POST['manufacturerSelector']) && $_POST['manufacturerSelector']) { if (is_numeric($_POST['manufacturerSelector'])) { $_SESSION['currentManufacturer'] = $_POST['manufacturerSelector']; } else { unset($_SESSION['currentManufacturer']); } unset($_SESSION['currentPage']); } // Per page change if (isset($_POST['pagingSelector']) && $_POST['pagingSelector']) { $possibilities = array(12, 24, 48, '9999'); if (in_array($_POST['pagingSelector'], $possibilities)) { $_SESSION['itemsPerPage'] = $_POST['pagingSelector']; $_SESSION['currentPage'] = 1; } } if (!isset($_SESSION['itemsPerPage']) || !$_SESSION['itemsPerPage']) { $_SESSION['itemsPerPage'] = 24; } // list style if (isset($_POST['listStyleSelector']) && $_POST['listStyleSelector']) { $possibilities = array(1, 2, 3); if (in_array($_POST['listStyleSelector'], $possibilities)) { $_SESSION['listStyleType'] = $_POST['listStyleSelector']; } } if (!isset($_SESSION['listStyleType']) || !$_SESSION['listStyleType']) { if ($block->content) { $_SESSION['listStyleType'] = $block->content; } else { $_SESSION['listStyleType'] = 1; } } // list sort by if (isset($_POST['sort_by']) && $_POST['sort_by']) { $_SESSION['sort_by'] = $_POST['sort_by']; } if (!isset($_SESSION['sort_by']) || !$_SESSION['sort_by']) { if ($this->base_object->config->shopConfiguration['sort_item_list_by']) { $_SESSION['sort_by'] = $this->base_object->config->shopConfiguration['sort_item_list_by']; } else { $_SESSION['sort_by'] = 'number_up'; } } // Page change if(isset($_POST['page'])) { $_GET['page'] = $_POST['page']; } if (isset($_GET['page']) && $_GET['page'] && is_numeric($_GET['page'])) { $_SESSION['currentPage'] = $_GET['page']; } if (!isset($_SESSION['currentPage']) || !$_SESSION['currentPage']) { $_SESSION['currentPage'] = 1; } if(!isset($_SESSION['currentManufacturer'])) { $_SESSION['currentManufacturer'] = ''; } // Infinite scrolling? $useInfinityScroll = false; if ($this->base_object->config->shopConfiguration['infinite_scrolling'] && isset($_GET['loadstep']) && is_numeric($_GET['loadstep']) && $_SESSION['itemsPerPage'] == '9999') { $_SESSION['currentPage'] = ($_GET['loadstep'] > 0) ? $_GET['loadstep'] : 1; $useInfinityScroll = true; } else if ($this->base_object->config->shopConfiguration['infinite_scrolling'] && $_SESSION['itemsPerPage'] == '9999') { $_SESSION['currentPage'] = 1; $useInfinityScroll = true; } // Load items $article_list = $item_object->get_item_list_new( $structure_id, $_SESSION['itemsPerPage'], $_SESSION['currentPage'], true, $_SESSION['currentManufacturer'], $_SESSION['sort_by'], $useInfinityScroll ); // Still necessary? if (isset($_GET['page']) && ($_GET['page'] > ceil($item_object->itemCount / $_SESSION['itemsPerPage']))) { $_SESSION['currentPage'] = $_GET['page'] = ceil($item_object->itemCount / $_SESSION['itemsPerPage']); $article_list = $item_object->get_item_list_new( $structure_id, $_SESSION['itemsPerPage'], $_SESSION['currentPage'], true, $_SESSION['currentManufacturer'], $_SESSION['sort_by'], $useInfinityScroll ); } // Show the (first) item, if only one item exists in current category if ($this->base_object->config->shopConfiguration['show_details_by_one_item_in_structure'] == 1 && count($article_list) == 1) { $currentItem = current($article_list); if ($currentItem->short_uri) { header('Location: ./' . $currentItem->short_uri . '.html'); } else { header('Location: /index.php?item_id=' . $currentItem->id); } exit(); } $this->layout_object->assign('shopArticles', $article_list); // Show only the items for infinite scrolling if ($this->base_object->config->shopConfiguration['infinite_scrolling'] && isset($_GET['loadstep']) && is_numeric($_GET['loadstep'])) { $data = array( 'template' => $this->layout_object->fetch('item_box_loop.tpl'), 'counter' => count($article_list) ); echo json_encode($data); exit(); // Show default item list } else { $this->layout_object->assign('block', $block); $this->layout_object->assign('itemsPerPage', $_SESSION['itemsPerPage']); $this->layout_object->assign('listStyleType', $_SESSION['listStyleType']); $this->layout_object->assign('sort_by', $_SESSION['sort_by']); $this->layout_object->assign('itemsFound', $item_object->itemCount); $this->layout_object->assign('found_pages', ceil($item_object->itemCount / $_SESSION['itemsPerPage'])); $this->layout_object->assign('found_showing_page', $_SESSION['currentPage']); $this->layout_object->assign('currentManufacturer', $_SESSION['currentManufacturer']); $this->layout_object->assign('useInfinityScroll', $useInfinityScroll); return $this->layout_object->_fetch('content_box_item_list.tpl'); } } private function item_list_old($structure_id, $block) { $item_object = new Item($this->base_object); // Structure change if ($_SESSION['lastStructureId'] != $structure_id) { unset($_SESSION['itemsPerPage']); unset($_SESSION['currentPage']); unset($_SESSION['currentManufacturer']); } $_SESSION['lastStructureId'] = $structure_id; // Manufacturer change if ($_POST['manufacturerSelector']) { if (is_numeric($_POST['manufacturerSelector'])) { $_SESSION['currentManufacturer'] = $_POST['manufacturerSelector']; } else { unset($_SESSION['currentManufacturer']); } unset($_SESSION['currentPage']); } // Per page change if ($_POST['pagingSelector']) { $possibilities = array(12, 24, 48, 'all'); if (in_array($_POST['pagingSelector'], $possibilities)) { $_SESSION['itemsPerPage'] = $_POST['pagingSelector']; $_SESSION['currentPage'] = 1; } } if (!$_SESSION['itemsPerPage']) { $_SESSION['itemsPerPage'] = 24; } // Page change if ($_GET['page'] && is_numeric($_GET['page'])) { $_SESSION['currentPage'] = $_GET['page']; } if (!$_SESSION['currentPage']) { $_SESSION['currentPage'] = 1; } $article_list = $item_object->get_item_list($structure_id, $_SESSION['itemsPerPage'], $_SESSION['currentPage'], true, $_SESSION['currentManufacturer']); if ($_GET['page'] > ceil($item_object->itemCount / $_SESSION['itemsPerPage'])) { $_SESSION['currentPage'] = $_GET['page'] = ceil($item_object->itemCount / $_SESSION['itemsPerPage']); $article_list = $item_object->get_item_list($structure_id, $_SESSION['itemsPerPage'], $_SESSION['currentPage'], true, $_SESSION['currentManufacturer']); } // Show the (first) item, if only one item exists in current category if ($this->base_object->config->shopConfiguration['show_details_by_one_item_in_structure'] == 1 && count($article_list) == 1) { $currentItem = current($article_list); if ($currentItem->short_uri) { header('Location: /' . $currentItem->short_uri . '.html'); } else { header('Location: /index.php?item_id=' . $currentItem->id); } exit(); } $this->layout_object->assign('shopArticles', $article_list); $this->layout_object->assign('shopView', $shopView); $this->layout_object->assign('block', $block); $this->layout_object->assign('itemsPerPage', $_SESSION['itemsPerPage']); $this->layout_object->assign('itemsFound', $item_object->itemCount); $this->layout_object->assign('found_pages', ceil($item_object->itemCount / $_SESSION['itemsPerPage'])); $this->layout_object->assign('found_showing_page', $_SESSION['currentPage']); $this->layout_object->assign('currentManufacturer', $_SESSION['currentManufacturer']); return $this->layout_object->_fetch('content_box_item_list.tpl'); } private function textbox($structure_id, $block) { $config = array(); eval($block->configuration); // replace meta script $var_data = array(); $var_data['[#HIDDEN_TEXT_START]'] = ''; $var_data['[#HIDDEN_TEXT_END]'] = ' mehr>><<weniger'; // 27.09.2026 -- [#zahlarten]: Liste der aktiven Zahlarten der Kundengruppe (Tom: die // CMS-Seite "Bezahlarten" soll nicht mehr von Hand gepflegt werden, sondern dem // Aktiv-Schalter im Backend folgen). if (strpos($block->content, '[#zahlarten]') !== false) { $var_data['[#zahlarten]'] = $this->zahlarten_liste(); } $block->content = strtr($block->content, $var_data); $block->configuration = $config; $this->layout_object->assign('block', $block); return $this->layout_object->_fetch('content_box_textbox.tpl'); } /** * Zahlarten, die der Besucher in der Kasse bekaeme -- dieselbe Quelle wie die Kasse * (Payment_method::getMethodsForGroup: payment_methods.active, shipping_area.active_, * Kundengruppen-Freischaltung). Besucher (Gruppe 100) sehen die Gast-Zahlarten, weil sie * als Gast bestellen; Haendler ihr B2B-Versandgebiet. Bankeinzug/Rechnung nur, wenn der * angemeldete Kunde dafuer freigeschaltet ist (wie in content_cash_desk_neu.tpl). */ private function zahlarten_liste() { try { include_once './core/payment_method.class.php'; $group = (int)$this->base_object->customer_group->id; if ($group <= 0 || $group == 100) { $group = 103; // Gast } $area = ($group == 101) ? 30 : 1; // Deutschland-B2B / Deutschland-B2C $pm_object = new Payment_method($this->base_object); $all = $pm_object->getMethodsForGroup($group, -1, $area); $customer = $this->base_object->customer; $list = array(); foreach ((array)$all as $pm) { if (!isset($pm->activeType) || $pm->activeType <= 0) { continue; } if ($pm->helperjoinkey == 'be' && empty($customer->direct_debit_active)) { continue; } if ($pm->helperjoinkey == 'r' && empty($customer->rechnung_active)) { continue; } $list[] = $pm; } $this->layout_object->assign('zahlarten', $list); $this->layout_object->assign('zahlarten_gruppe', $group); return $this->layout_object->_fetch('content_box_zahlarten.tpl'); } catch (Throwable $e) { error_log('zahlarten_liste: '.$e->getMessage()); return ''; } } private function banner($structure_id, $block) { $config = array(); eval($block->configuration); $block->configuration = $config; $this->layout_object->assign('block', $block); return $this->layout_object->_fetch('content_box_banner.tpl'); } private function slider($structure_id, $block) { // get config $quantity = (Config::has_key('slider_items') && Config::is_set('slider_items')) ? Config::get_value('slider_items') : 10; $sort = ($this->base_object->config->shopConfiguration['sort_item_list_by']) ? $this->base_object->config->shopConfiguration['sort_item_list_by'] : 'number_up'; $structure_object = new Structure($this->base_object); $structure_content = $structure_object->get_by_id($block->content); $item_object = new Item($this->base_object); if ($structure_content->item_type) { $article_list = $item_object->get_item_list_by_type($block->content, $quantity, 1, true, false, $sort); } else { $article_list = $item_object->get_item_list_new($block->content, $quantity,1, true, false, $sort); } //echo '
';print_r($article_list);exit();
		$this->layout_object->assign('shopArticles', $article_list);
		$this->layout_object->assign('block', $block);
		
		return $this->layout_object->_fetch('content_box_slider.tpl');
	}
	
	private function manufacturers($structure_id, $block) {
		$this->layout_object->assign('manufacturers', Manufacturer::get_all_active_static());
		
		return $this->layout_object->_fetch('content_box_manufacturers.tpl');
	}
}