Задать вопрос
  • Где выключить выделение?

    AlexonClassic
    @AlexonClassic Автор вопроса
    Я только учусь
    Достаточно было снять вот эту галку:
    5cfffb28052ff208546702.png
    Ответ написан
    Комментировать
  • Как получить дату публикации в формате 01:17 минут назад?

    AlexonClassic
    @AlexonClassic Автор вопроса
    Я только учусь
    Решение вопроса такое:

    В файле
    templates/my_template/html/layouts/joomla/content/info_block/publish_date.php

    я прописал вот такой код вызова функции:
    require_once JPATH_THEMES . '/my_teplate/helper.php'; // подключаю файл с функцией
     
    <span uk-icon="icon: calendar"></span>
    <time datetime="<?php echo JHtml::_('date', $art_publish_date, 'c'); ?>" itemprop="datePublished">
    	<?php echo publish_date ($art_publish_date); ?>
    </time>

    В корне своего шаблона. я создал файл:
    templates/my_template/helper.php

    В котором прописал вот эту функцию:
    function publish_date($timestamp) {
    		$current_time = time();
    		$publish_time = strtotime($timestamp);
    		$time_diff = $current_time - $publish_time;
     
    		$seconds = $time_diff;
    		$minutes = round($seconds / 60); // 60 секунд. Минуты в UNIX формате даты
    		$days = JHtml::_('date', $current_time, 'd') - JHtml::_('date', $publish_time, 'd');
     
    		$minutes_interval = $minutes >= 2 && $minutes <= 4 || $minutes >= 22 && $minutes <= 24 || $minutes >= 32 && $minutes <= 34 || $minutes >= 42 && $minutes <= 44 || $minutes >= 52 && $minutes <= 54;
    		$minut_interval   = $minutes == 0 || $minutes >= 5 && $minutes <= 20 || $minutes >= 25 && $minutes <= 30 || $minutes >= 35 && $minutes <= 40 || $minutes >= 45 && $minutes <= 50 || $minutes >= 55 && $minutes <= 60;
    		$minuta_interval  = $minutes == 1 | $minutes == 21 || $minutes == 31 || $minutes == 41 || $minutes == 51;
     
    		if ($seconds <= 60) {
    			return "<span>" . JText::_('COM_CCK_JUST_NOW') . "</span>";
    		} else if ($minutes <= 59) {
    			if ($minutes == 1) {
    				return "<span>" . JText::_('COM_CCK_JUST_NOW') . "</span>";
    			} else if ($minutes_interval) {
    				return "<span>" . $minutes . " " . JText::_('COM_CCK_MINUTES') . " " . JText::_('COM_CCK_AGO') . "</span>";
    			} else if ($minut_interval) {
    				return "<span>" . $minutes . " " . JText::_('COM_CCK_MINUT') . " " . JText::_('COM_CCK_AGO') . "</span>";
    			} else if ($minuta_interval) {
    				return "<span>" . $minutes . " " . JText::_('COM_CCK_MINUTE') . " " . JText::_('COM_CCK_AGO') . "</span>";
    			}
    		} else if ($days == 0) {
    			return "<span>" . JText::_('COM_CCK_TODAY_AT') . " " . JHtml::_('date', $timestamp, JText::_('DATE_FORMAT_LC12')) . "</span>";
    		}else if ($days == 1) {
    			return "<span>" . JText::_('COM_CCK_YESTERDAY_IN') . " " . JHtml::_('date', $timestamp, JText::_('DATE_FORMAT_LC12')) . "</span>";
    		} else {
    			return "<span>" . JHtml::_('date', $timestamp, JText::_('DATE_FORMAT_LC2')) . "</span>";
    		}
    	}

    Добавил несколько языковых переменных в
    my_site\language\overrides\ru-RU.override.ini

    DATE_FORMAT_LC12="H:i"
    COM_CCK_JUST_NOW="опубликовано только что"
    COM_CCK_MINUT="минут"
    COM_CCK_MINUTE="минута"
    COM_CCK_MINUTES="минуты"
    COM_CCK_AGO="назад"

    В итоге:
    • если статья была опубликована менее 59-ти минут, то отображается (например): 31 минутА назад или 50 минуТ назад...
    • если статья была опубликована более 60-ти минут, то отображается (например): сегодня. в 01:25...
    • если статья была опубликована более суток назад, то отображается: вчера, в 15:27...
    Ответ написан
    Комментировать
  • Как в Joomla 3, в файл intro_image.php добавить название категории и дату?

    AlexonClassic
    @AlexonClassic Автор вопроса
    Я только учусь
    Оказалось что все же можно обойтись без запроса к БД...

    Достаточно было в
    templates/my_template/html/layouts/joomla/content/info_block

    создать 2-а файла:
    1. category_title.php, в котором прописать это:
      <?php defined('JPATH_BASE') or die;
      	echo $this->escape($displayData['item']->category_title);
      ?>
    2. publish_date_no_html.php, в котором прописать это:
      <?php defined('JPATH_BASE') or die;
      	echo JHtml::_('date', $displayData['item']->publish_up, JText::_('DATE_FORMAT_LC2'));
      ?>
    а в blog_item.php добавить:
    $cat_name = JLayoutHelper::render('joomla.content.info_block.category_title', array('item' => $this->item));
    	$art_publish_date = JLayoutHelper::render('joomla.content.info_block.publish_date_no_html', array('item' => $this->item));
    	JRequest::setVar('cat_name', $cat_name, 'post'); //задаем глобальную переменную
    	JRequest::setVar('art_publish_date', $art_publish_date, 'post'); //задаем глобальную переменную

    и уже в intro_image.php, добавить это:
    $cat_name = JRequest::getVar('cat_name', '', 'post'); //считываем глобальную переменную
    	$art_publish_date = JRequest::getVar('art_publish_date', '', 'post'); //считываем глобальную переменную

    и уже в нужном месте, через echo вывести название категории и дату публикации материала...
    Ответ написан
  • Как разделить leading на несколько разных частей со своей разметкой?

    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.
    Ответ написан
    Комментировать