Помощь В шаблоне статьи создать позицию модуля

Статус
В этой теме нельзя размещать новые ответы.

matrixid

Мой дом здесь!
Регистрация
6 Ноя 2013
Сообщения
311
Реакции
282
Как в шаблоне полной статьи создать позицию модуля? Требуется в каждой статье выводить блок информации. Блок статичен и должен присутствовать в каждом материале полной новости.
Плагины Content - Load Modules, Modules Anywhere и им подобные не подходят.
Чуть подробнее (на демо шаблоне:(

sQLTDfS.jpg

Цифрами проставил варианты куда хочу внести определенную информацию (модуль, блок)
1 - на одном уровне с заголовком
2 - в блок инструментов
3 - между заголовком и началом текста самого материала
Интернет курил долго и упорно, начинай от вариантов с плагинами Content - Load Modules, Modules Anywhere и заканчивая правкой шаблонов php файлов (варианты были предложены для старых версий joomla - которые сейчас не работают).
Собственно вопрос как добавить блок/позицию в шаблон полной статьи/материала??
 
Править пхп файл шаблона вывода статьи. Например тут /templates/template_name/html/com_content/article/default.php
Насчет вывести туда позицию модуля не знаю, но статичный html/php добавить можно
угу копался я в этом файле как и было предложено в инете, вставлял код в каждую строчку в итоге он выводился всегда в 1 месте (до заголовка статьи), вне самого материала или вовсе не выводился немного по конкретнее бы.
Привожу код упомянутого файла:
Код:
<?php
defined('_JEXEC') or die;

require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'functions.php';

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');

Artx::load("Artx_Content");

$component = new ArtxContent($this, $this->params);
$article = $component->article('article', $this->item, $this->item->params, array('print' => $this->print));

echo $component->beginPageContainer('item-page');
if (strlen($article->pageHeading))
    echo $component->pageHeading($article->pageHeading);
$params = $article->getArticleViewParameters();
if (strlen($article->title)) {
    $params['header-text'] = $this->escape($article->title);
    if (strlen($article->titleLink))
        $params['header-link'] = $article->titleLink;
}
// Build article content
$content = '';
if ('above full article' === $article->paginationPosition)
    $content .= $article->pagination();
if (!$article->introVisible)
    $content .= $article->event('afterDisplayTitle');
$content .= $article->event('beforeDisplayContent');
if (strlen($article->toc))
    $content .= $article->toc($article->toc);
if (strlen($article->text)) {
    if (strlen($article->images['fulltext']['image']))
        $content .= $article->image($article->images['fulltext']);
    if ('above text' === $article->paginationPosition)
        $content .= $article->pagination();
    $content .= $article->text($article->text);
    if ('below text' === $article->paginationPosition)
        $content .= $article->pagination();
    if ($article->showLinks)
        $content .= $this->loadTemplate('links');
}
if ($article->introVisible)
    $content .= $article->intro($article->intro);
if (strlen($article->readmore))
    $content .= $article->readmore($article->readmore, $article->readmoreLink);
if ('below full article' === $article->paginationPosition)
    $content .= $article->pagination();
$content .= $article->event('afterDisplayContent');
$params['content'] = $content;

// Render article
echo $article->article($params);
echo $component->endPageContainer();
 
1. Для начала чтобы не слетали при обновлении joomlaВаши изменения копируем файл components/com_content/views/article/tmpl/default.php в используемый шаблон templates/название_шаблона/html/com_content/article/.

2. В необходимом месте, где необходимо выводить модуль, прописываем следующий код:

Код:
<?php $modules = JModuleHelper::getModules( 'название позиции' );
foreach ( $modules as $module ) {
  echo JModuleHelper::renderModule( $module, array( 'style' => 'xhtml' ) );
}?>

ЛИБО:

Код:
<?php
jimport('joomla.application.module.helper');
  $mods = JModuleHelper::getModules('название позиции');
  echo JModuleHelper::renderModule($mods[0], array( 'style' => 'xhtml' ));
?>

3. В файле templates/название_шаблона/templateDetails.xml прописываем название позиции добавив новый код между тегами:
Код:
<positions>
…
  <position>название позиции</position>
…
</positions>

4. Добавляем сам модуль в админке в созданную позицию!
 
а что если у меня есть default.php уже и там и там:
\templates\название_шаблона\html\com_content\article\default.php - размер 2кб
\components\com_content\views\article\tmpl\default.php - размер 15кб
тогда как выполнять пункт №1
 
Приоритет имеет папка шаблона, значит все правки буду взяты именно оттуда
 
попробовал как сказали - выводится но не там где надо, скриншот:
Kx1Eg4A.jpg

но позиция не та! Скопировал в каждую строчку \templates\название_шаблона\html\com_content\article\default.php
позиция не меняется. Не получается перенести в сам материал.
Код моего файла \templates\название_шаблона\html\com_content\article\default.php
Код:
<?php
defined('_JEXEC') or die;

require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'functions.php';

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');

Artx::load("Artx_Content");

$component = new ArtxContent($this, $this->params);
$article = $component->article('article', $this->item, $this->item->params, array('print' => $this->print));

echo $component->beginPageContainer('item-page');
if (strlen($article->pageHeading))
    echo $component->pageHeading($article->pageHeading);
$params = $article->getArticleViewParameters();
if (strlen($article->title)) {
    $params['header-text'] = $this->escape($article->title);
    if (strlen($article->titleLink))
        $params['header-link'] = $article->titleLink;
}
// Build article content
$content = '';
if ('above full article' === $article->paginationPosition)
    $content .= $article->pagination();
if (!$article->introVisible)
    $content .= $article->event('afterDisplayTitle');
$content .= $article->event('beforeDisplayContent');
if (strlen($article->toc))
    $content .= $article->toc($article->toc);
if (strlen($article->text)) {
    if (strlen($article->images['fulltext']['image']))
        $content .= $article->image($article->images['fulltext']);
    if ('above text' === $article->paginationPosition)
        $content .= $article->pagination();
    $content .= $article->text($article->text);
    if ('below text' === $article->paginationPosition)
        $content .= $article->pagination();
    if ($article->showLinks)
        $content .= $this->loadTemplate('links');
}
if ($article->introVisible)
    $content .= $article->intro($article->intro);
if (strlen($article->readmore))
    $content .= $article->readmore($article->readmore, $article->readmoreLink);
if ('below full article' === $article->paginationPosition)
    $content .= $article->pagination();
$content .= $article->event('afterDisplayContent');
$params['content'] = $content;

// Render article
echo $article->article($params);
echo $component->endPageContainer();
Как правильно сделать?
 
А делаться должно вот так:
$content .= вывод модуля

// 1 и 2 - 1 позиционируй с css
$content .= $article->event('afterDisplayTitle');
$content .= вывод модуля - этот после названия

// 3
до этой строки
$content .= $article->intro($article->intro);
или здесь
$content .= $article->text($article->text);

Думаю здесь уже понятнее и разберешься
 
Можно использовать стандартный плагин джумла типа {loadmodule} или {loadposition} в большинстве случаев решает задачу.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху