Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 7824 Просмотров
*

Wild Tiger

  • Осваиваюсь на форуме
  • ***
  • 182
  • 16
  • Сайты только на Joostina
Для одного материала надо сделать так, чтобы начало статьи (т.е. то, что до тега hr id=system-readmore) было видно всем, а то, что после - только зарегистрированным (чтобы гостю при открытии статьи (не раздела!) показывался только анонс, а зарегистрированному - полностью).
Это возможно?

Joomla 1.5.20 Stable. Материал с доступом "Для зарегистрированных", в материале тег hr id="system-readmore" есть. Модуль и меню на этот материал с доступом "для всех".
Результат: гости не видят даже вводной части материала. Проблема в том, что гостю такая статья вообще не отдается.
« Последнее редактирование: 15.11.2011, 03:53:21 от Aleks_El_Dia »
сушитель лампочек
*

beliyadm

  • Профи
  • ********
  • 8359
  • 1527
  • Севастополь == Россия
Элементарно, Ватсон
Выставляем везде в настройках контента и меню опцию "показывать вступительный текст"
Открываем components\com_content\models\article.php, находим примерно с 586 строки "// Are we showing introtext with the article" и заменяем на
Код: php
// Are we showing introtext with the article
$user =& JFactory::getUser();
if (!$params->get('show_intro') && !empty($this->_article->fulltext)) {
$this->_article->text = $this->_article->fulltext;
} else {
if($user->id) {
$this->_article->text = $this->_article->introtext . chr(13).chr(13). $this->_article->fulltext;
} else {
$this->_article->text = $this->_article->introtext. '<h3>please login first</h3>';
}
}

Теперь в режиме просмотра полной статьи если я не авторизован будет показываться только introtext и сообщение с просьбой авторизоваться
« Последнее редактирование: 15.11.2011, 03:50:32 от Aleks_El_Dia »
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

Wild Tiger

  • Осваиваюсь на форуме
  • ***
  • 182
  • 16
  • Сайты только на Joostina
ура, такая реализация работает! (что тогда выводит  \templates\ВашШаблон\html\com_content\article\default.php ?)

P.S. А как вместо сообщения (в примере в тегах <h3>) вывести текст из LOGIN_DESCRIPTION языкового файла?
замена $this->_article->text = $this->_article->introtext. '<h3>please login first</h3>';
на $this->_article->text = $this->_article->introtext. '<p>'.$LOGIN_DESCRIPTION;
не прокатила :)
сушитель лампочек
*

beliyadm

  • Профи
  • ********
  • 8359
  • 1527
  • Севастополь == Россия
на $this->_article->text = $this->_article->introtext. '<p>'.$LOGIN_DESCRIPTION;
Ну что вы как маленькие :)
Код: php
$this->_article->text = $this->_article->introtext. JText::_("LOGIN_DESCRIPTION");
И вписать LOGIN_DESCRIPTION в файл языка контента (на мой взгляд ради одной фразы подключать весь ини com_user не очень хорошо
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

Wild Tiger

  • Осваиваюсь на форуме
  • ***
  • 182
  • 16
  • Сайты только на Joostina
Рано еще добавлять. Обнаружилась одна особенность: для незарегистрированных во всех статьях после текста материала теперь выводится приглашение зарегистрироваться (даже там, где кроме анонса ничего дальше нет, т.е. короткая статья "для всех"). Слишком назойливо получается.
Т.е. не хватает еще проверки "Если анонс есть, а продолжения нет, то приглашение не выводить".

(Каюсь, сам виноват, в описании исходной задачи не предвидел этого).
сушитель лампочек
*

beliyadm

  • Профи
  • ********
  • 8359
  • 1527
  • Севастополь == Россия
Т.е. не хватает еще проверки "Если анонс есть, а продолжения нет, то приглашение не выводить".
Код: php
$user =& JFactory::getUser();
if (!$params->get('show_intro') && !empty($this->_article->fulltext)) {
$this->_article->text = $this->_article->fulltext;
} else {
if($user->id) {
$this->_article->text = $this->_article->introtext . chr(13).chr(13). $this->_article->fulltext;
} else if(!$user->id && $this->_article->fulltext) {
$this->_article->text = $this->_article->introtext. JText::_("LOGIN_DESCRIPTION");
} else {
$this->_article->text = $this->_article->introtext;
}
}

Оно?
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

Wild Tiger

  • Осваиваюсь на форуме
  • ***
  • 182
  • 16
  • Сайты только на Joostina
оно. Работает как и задумано.
Вот что значит настоящая техподдержка :)
сушитель лампочек