Задать вопрос
AlexonClassic
@AlexonClassic
Я только учусь

Как разделить leading на несколько разных частей со своей разметкой?

Всем привет!

Есть код (файл blog.php), который отвечает за вывод вводных текста, изображения и т. д. статьи во всю ширину:
<?php if (!empty($this->lead_items)) : ?>
        <div class="items-leading clearfix">
			<?php foreach ($this->lead_items as &$item) : ?>
                <div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
					<?php
						$this->item = &$item;
						echo $this->loadTemplate('item');
					?>
                </div>
				<?php $leadingcount++; ?>
			<?php endforeach; ?>
        </div>
	<?php endif;

Я бы хотел разделить его на несколько частей чтобы сделать что-то типа этого:
5c0689b748a22684847277.png
т. е. с одной стороны - слайдер (уже сделано (без модулей)), отображающий (например 3-и вводных статьи), а с другой - статические 3(4,5...)-и вводных статьи... Т. е., я, в админке, в "Редактирование пункта меню" --> "Параметры макета Блога" --> "Во всю ширину", указываю (например) цифру 6-ть в надежде того, что 3-и вводных статьи будут отображаться в слайдере, а остальные (следующие по дате публикации) 3-и вводных статьи - справа от слайдера, а уже ниже (назовем это "под слайдером"), будут отображаться остальные (следующие по дате публикации) вводные статьи... Ну т. е. те вводные статьи, за которые отвечает код:
<?php if (!empty($this->intro_items)) : ?>
    		<?php foreach ($this->intro_items as $key => &$item) : ?>
    			<?php $rowcount = ((int) $key % (int) $this->columns) + 1; ?>
    			<?php if ($rowcount === 1) : ?>
    				<?php $row = $counter / $this->columns; ?>
                    <div class="items-row cols-<?php echo (int) $this->columns; ?> <?php echo 'row-' . $row; ?> row-fluid clearfix">
    			<?php endif; ?>
                <div class="span<?php echo round(12 / $this->columns); ?>">
                    <div class="item column-<?php echo $rowcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
    					<?php
    						$this->item = &$item;
    						echo $this->loadTemplate('item');
    					?>
                    </div>
    
    				<?php $counter++; ?>
                </div>
    
    			<?php if (($rowcount == $this->columns) or ($counter == $introcount)) : ?>
                    </div>
    
    			<?php endif; ?>
    		<?php endforeach; ?>
    	<?php endif;

Надеюсь нормально объяснил чего хочу...

Подскажите плз, как это сделать? Понимаю что нужно как-то прописать условие в foreach... но как это сделать - не пойму...

Заранее благодарю за ответы!

P. S.
  • Использование модулей - не предлагать!
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
AlexonClassic
@AlexonClassic Автор вопроса
Я только учусь
Как всегда все оказалось как нельзя просто!

В приведенном выше коде (последний код в первом посту) файла blog.php, в
<?php
$this->item = &$item;
echo $this->loadTemplate('item');
?>

нежно вставить перед циклом вот эту строку:
$myarr = array_slice($this->intro_items, 3);
и в цикле foreach заменить
$this->intro_items
на
$myarr
чтобы получилось вот так:
<?php 
$myarr = array_slice($this->intro_items, 3);
foreach ($myarr_items as $key => &$item) :
?>

тогда, вводные статьи будут выводиться не с первой (если первая статья - последняя опубликованная), а с 3-й вводной статьи. Если вместо тройки поставить (например) 4-е, то будет отображены статьи, начиная с 4-й вводной статьи... Ну, думаю понятно... Если не понятно - попробуйте скопировать код и поэксперементировать...

Ну и там, где нужно вывести те вводные статьи, которые мы "пропустили" выше, пишем следующий код:
<?php if (!empty($this->intro_items)) :
$myarr = array_slice($this->intro_items, 0, 3);
foreach ($myarr as $key => &$item) :
$this->item = &$item;
echo $this->loadTemplate('item');
endforeach;
endif; ?>

после чего, будут отображены недостающие вводные статьи.

Для того, чтобы изменить разметку этих статей, в
echo $this->loadTemplate('item');

заменяем item на какой-нибудь свой файл, предварительно его создав в templates/my_template/html/com_content/category

например: blog_slider.php. Тогда вместо item, пишем slider.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы