Разработка

DJ-Catalog2 Joomla! - корректный вывод списка товаров таблицей интернет-магазина на базе компонента DJ-Catalog2 для Joomla

Краткое руководство

Наверное, вы уже успеци заметить, что при переключении макета списка товаров на таблицу в шапке таблицы (если у товаров заполнены атрибуты) отображаются все атрибуты, что есть, независимо от того, все ли они заполнены. Бывает такая ситуация, когда для разных категорий заполняются разные атрибуты товаров. И по логике, не заполненные атрибуты ни у одного и товаров в данном разделе не должны отобрааться в шапке таблицы. Но, к сожалению, это не так.

К счастью, мы можем это исправить. Придется написать небольшой код и пойти на хитрость. Возможно, кто-то скажет, что это костыль, и придумает другое решение. И это будет хорошо :) Но пы пока додумались только до этого варианта.

Для этого нам необходимо скопировать в папку html вашего шаблона папку com_djcatalog2/items/default_table.php. Этот файл отвечает за вывод товаров таблицей на странице раздела (категории).

Прсле тега table и перед выводом шапки (т.е. тега thead) выводим следующий код:


items);
			$itemfirstLink = DJCatalogHelperRoute::getItemRoute($itemfirst->slug, $itemfirst->catslug);
			if ($this->params->get('seo_advanced', 0) == 0 && (int)($itemfirst->catslug)) {
				$itemfirstLink = DJCatalogHelperRoute::getItemRoute($itemfirst->slug, $itemfirst->catslug);
			}
			$popupLink = DJCatalogHelperRoute::getItemRoute($itemfirst->slug, $itemfirst->catslug, null, 'preview').'&tmpl=component';
			if ($this->params->get('seo_advanced', 0) == 0 && (int)($itemfirst->catslug)) {
				$popupLink = DJCatalogHelperRoute::getItemRoute($itemfirstm->slug, $itemfirst->catslug, null, 'preview').'&tmpl=component';
			}
			$itemfirst->_link = $itemfirstLink;
			$itemfirst->_popuplink = $popupLink;
			
			$itemfirst->_images = ($this->params->get('image_hover_item', 0) == 1) ? DJCatalog2ImageHelper::getImages('item', $itemfirst->id, true) : array();
			
			$this->itemfirst_cursor = $itemfirst;
			?>
,
т.е. мы берем первый элемент из массива товаров (главное, чтобы у него были заполнены все нужные нам атрибуты) и проелываем все то же самое, что и с обычным товаром (получаем ссылку на его страницу, его изображение и всю информацию о нем)

Теперь создаем шапку:


		<thead>
			<tr>
				<?php if($itemfirst){?>
					<?php if ((int)$this->params->get('show_item_name','1') > 0 ) {?>
						<th class="djc_thead djc_th_title" nowrap="nowrap">
							<?php echo JText::_('COM_DJCATALOG2_NAME'); ?>
						</th>
					<?php } ?>

					<?php if ($this->params->get('items_show_attributes', '1') && !empty($this->attributes)) { 
							$layout = new JLayoutFile('com_djcatalog2.attributestablenameszhbi', null, array('component'=> 'com_djcatalog2'));
							echo $layout->render(array('item' => $itemfirst, 'attributes' => $this->attributes, 'context' => 'com_djcatalog2.items.extra_fields', 'params' => $this->params));
						}?>
					<?php if ($price_auth && $this->params->get('show_price') > 0) { ?>
							<th class="djc_thead djc_th_price">
								<?php echo JText::_('COM_DJCATALOG2_PRICE'); ?>
							</th>
					<?php } ?>

					<?php if ((int)$this->params->get('items_show_cart_button', 1) > 0 && ($this->params->get('cart_enabled', false) || $this->params->get('cart_query_enabled', 1) )) { ?>
						<th class="djc_thead djc_th_addtocart_cell">
							Добавить в корзину
						</th>
					<?php } ?>
				<?php } ?>
			</tr>
		</thead>

Теперь в тело таблицы (внутри тега tbody) выводим первой строкой сам первый товар:


										<tr class="cat-list-row<?php echo $k;?> djc_row<?php echo $k; if ($item->featured == 1) echo ' featured_item'; ?>">
				<?php if ((int)$this->params->get('show_item_name','1') > 0 ) { ?>
					<td class="djc_td_title">
				   		<?php 
						if ((int)$this->params->get('show_item_name','1') == 2 ) {
							echo $itemfirst->name;
						} else if ((int)$this->params->get('show_item_name','1') == 3) { ?>
							<a class="djc_item_preview_link" href="<?php echo JRoute::_($itemfirst->_popuplink); ?>"><?php echo $this->escape($itemfirst->name); ?></a>
						<?php } else { ?>
							<h3><a class="djc_item_link" href="<?php echo JRoute::_($itemfirst->_link); ?>"><?php echo $this->escape($itemfirst->name); ?></a></h3>
						<?php } ?>
						<?php if ($itemfirst->featured == 1) { 
							echo '<img class="djc_featured_image" alt="'.JText::_('COM_DJCATALOG2_FEATURED_ITEM').'" title="'.JText::_('COM_DJCATALOG2_FEATURED_ITEM').'" src="'.DJCatalog2ThemeHelper::getThemeImage('featured.png').'" />';
						}?>
						
						<?php if ($this->params->get('items_show_labels') == '1' || $this->params->get('items_show_labels') == '2') {
							echo $this->loadTemplate('items_labels'); 
						}?>
						
						<?php if(!empty($itemfirst->event->afterDJCatalog2DisplayTitle)) { ?>
						<div class="djc_post_title">
							<?php echo $itemfirst->event->afterDJCatalog2DisplayTitle; ?>
						</div>
						<?php } ?>
					<?php } ?>
					</td>
					<?php if ($this->params->get('items_show_attributes', '1') && !empty($this->attributes)) { 
							$layout = new JLayoutFile('com_djcatalog2.attributestablevalueszhbi', null, array('component'=> 'com_djcatalog2'));
							echo $layout->render(array('item' => $itemfirst, 'attributes' => $this->attributes, 'context' => 'com_djcatalog2.items.extra_fields', 'params' => $this->params));
						}?>
					<?php if ($price_auth && $this->params->get('show_price') > 0) { ?>
			            <td class="djc_price">
			                <?php if ($itemfirst->price > 0.0) { ?>
		                <?php echo $this->loadTemplate('price'); ?>
					<?php } ?>
			            </td>
					<?php } ?>

					<?php if ((int)$this->params->get('items_show_cart_button', 1) > 0 && ($this->params->get('cart_enabled', false) || $this->params->get('cart_query_enabled', 1) )) { ?>
						<td class="djc_addtocart_cell">
						<?php if ((int)$itemfirst->available == 1) {
							//echo $this->loadTemplate('addtocart');
							$multi_form = $multi_form || (bool)($this->params->get('items_show_cart_button') == 2);
							//$layout = new JLayoutFile('com_djcatalog2.addtocart', JPATH_ROOT.'/components/com_djcatalog2/layouts');
							$layout = new JLayoutFile('com_djcatalog2.addtocart', null, array('component'=> 'com_djcatalog2'));
							echo $layout->render(array('item' => $itemfirst, 'context' => 'com_djcatalog2.items.addtocart', 'params' => $this->params, 'multi_form' => (bool)($this->params->get('items_show_cart_button') == 2)));
						}?>
						</td>
					<?php } ?>
			</tr>

Далее оставляем вывод товаров, как есть. Благодаря тому, что функция по работае с массивами array_shift() отображает первый жлемент массива, в результате ее работы массив уменьшается на выбранный элемент, мнего кода писать не пришлось.

Итак, мы скорректировали вывод списка товаров таблицей в компоненте DJ-Catalog2 для Joomla!


Поделиться

А теперь поговорим о вашем проекте!