Автоматическое ограничение количества символов вводного текста

  • 24 Ответов
  • 7686 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн Toxa33

Была такая же тема для Joomla 2.5 http://joomlaforum.ru/index.php?topic=183528.0

В 3 Joomla ктонито сделал подобное?

*

Оффлайн fbr

Зачем подобное? этот вариант и работает без проблем в j3

Код: (php) [Выделить]
echo JHtml::_('string.truncate', ($item->introtext), '100');

цифру ставите свою

*

Оффлайн Toxa33

не подскажите в какой файл вставлять? и куда именно?

*

Оффлайн fbr

Это зависит от того что и где вы хотите ограничить
Я ж не знаю, где  - в модуле, блоге, на главной ...

*

Оффлайн Toxa33

вывод статей на главной и в блоге категории
статьи выводятся стандартными средствами, без сторонних компонентов

*

Оффлайн fbr

в блоге категории файл blog_item.php:
Код: (php) [Выделить]
40 <?php echo $this->item->event->beforeDisplayContent?> <?php echo JHtml::_('string.truncate', ($this->item->introtext), '100')?>аналогично для главной - найти код в соответствующем файле и отредактировать

Лучше это делать не в самом компоненте, а в шаблоне в папке HTML, если нет - то создать


*

Оффлайн fbr

Пожалуйста
Только, на мой взгляд, это не лучший вариант. Может проще "подробнее" вставлять раньше? Естественный ограничитель выводимого текста - лучше чем хак. Другое дело в модуле, где это может диктоваться компактностью

*

Оффлайн Toxa33

подробнее вставляется вручную, но статьи размещают разные пользователи и все делают вводную часть разной длины.
Для красоты хочется чтобы было везде одинаково

*

Оффлайн Ingener

Да, но еще бы для красоты к этому решению добавить еще автоочистку HTML ВВОДНОГО ТЕКСТА, а то получится еще хуще чем было, подскажите решение пожалуйста.


*

Оффлайн Ingener

Напишите пожалуйста какой будет окончательный вариант указанной выше строки:

40 <?php echo $this->item->event->beforeDisplayContent?> <?php echo JHtml::_('string.truncate', ($this->item->introtext), '100')?>
чтобы работало ограничение кол-ва символов и очистка HTML.

*

Оффлайн b2z

  • *****
  • 7740
  • [+]739 / [-]0
  • Пол: Мужской
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
Хех, разве так сложно заменить одно на другое? :)

Код: (php) [Выделить]
<?php echo $this->item->event->beforeDisplayContent?>
<?php echo JHtml::_('string.truncate', (strip_tags($this->item->introtext)), '100')?>

*

Оффлайн Takohashi

Хех, разве так сложно заменить одно на другое? :)

Код: (php) [Выделить]
<?php echo $this->item->event->beforeDisplayContent?>
<?php echo JHtml::_('string.truncate', (strip_tags($this->item->introtext)), '100')?>

А можно как-то сделать, чтобы при этой обрезке оставался блок с ссылками «Подробнее» и «Комментарии»?

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
А можно как-то сделать, чтобы при этой обрезке оставался блок с ссылками «Подробнее» и «Комментарии»?
Этот код обрезает текст материала, а "подробнее" и "комментарии" вставляются плагинами уже за пределами этого кода
Так что одно другому не мешает
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн Takohashi

beliyadm, почти так. Не обратил внимание, что «Подробнее» в настройках пункта меню случайно отключил — действительно выводится. А вот ссылка на комментарии — нет. Я использую плагин для DISQUS, и вот он как раз ссылку на комментарии засовывает в introtext, поэтому она и не выводится. Можно это как-то исправить? Вот кусок кода:
Код: (php) [Выделить]
// Set '$row->text' to '$row->introtext' for J!1.6+
if (version_compare(JVERSION, '1.6.0', 'ge'))
$row->text = $row->introtext;

// Fetch the template
ob_start();
$dsqListingPath = DisqusHelper::getTemplatePath($this->plg_name, 'listing.php');
$dsqListingPath = $dsqListingPath->file;
include ($dsqListingPath);
$getListingTemplate = $this->plg_copyrights_start.ob_get_contents().$this->plg_copyrights_end;
ob_end_clean();

// Output
$row->text = $getListingTemplate;

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
DISQUSне знаю этого плагина, потому не могу ничего сказать
В этом куске кода я не не вижу вставки
Давайте так, по порядку
Версия движка на сайте, что используется из плагинов, что требуется получить и какими средствами
Возможно что есть решение достаточно простое
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн Takohashi

beliyadm, у меня сейчас всё на локалхосте. Joomla 3.3.6, плагин Disqus Comments. Плагин вообще простецкий — два с половиной файла и две с половиной настройки. По факту — всего лишь в статью подгружает из сети форму Дискуса и выводит ссылку на комментарии в вводном тексте статьи (в introtext), который обрезается.

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
По факту — всего лишь в статью подгружает из сети форму Дискуса и выводит ссылку на комментарии в вводном тексте статьи (в introtext), который обрезается.
То есть по сути это как плагин стандартный движка аля loadmodule?

По факту — всего лишь в статью подгружает из сети форму Дискуса и выводит ссылку на комментарии в вводном тексте статьи (в introtext), который обрезается.
Честно не понял, кто у тебя обрезается? Интротекст? В режиме стандартных материалов?

Или может так - подгружает форму дискуса и ссылку на комментарии и обрезает интротекст

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

*

Оффлайн Takohashi

beliyadm, ну вот смотри: на главной странице выводятся новости в виде вводного текста (интротекст), к каждой новости плагин Дискуса на главной странице отображает ссылку «Х комментариев», но эта ссылка выводится в конце интротекста, а так как мы обрезаем интротекст, как сказано в этом топике, то само-собой эта ссылка тоже обрезается.
Мне нужно, чтобы ссылка «Х комментариев» выводилась не в интротексте, а за его пределами, рядом с «Подробнее».

А форма Дискуса отображается на странице полного текста новости — это я просто суть плагина описал.

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
Если посмотреть страницу шаблона материала - то там видно что работает afterDisplayContent
Если у этого (не знаю что за дискусс) работает эта логика нашего движка - то все работает

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

*

Оффлайн Takohashi

написать банально плагин
Эх, я то думал, там как-то по-простому можно исправить, буквально заменив какую-то переменную...
Но, видимо, так просто не исправить. По тому куску кода, что я привёл выше видно, что первоначальный интротекст отправляется в файл listing.php (в том файле всего лишь к интротексту добавляяется ссылка «Х комментариев»), потом он обрамляется комментариями plg_copyrights_start/plg_copyrights_end и всё это выводится интротекстом.

Можно на гитхабе код глянуть — https://github.com/joomlaworks/disqus-comments-for-joomla Он более чем подробно закомментирован, но всё равно не соображу, так как никогда код в подобном ключе не менял.

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
Эх, я то думал, там как-то по-простому можно исправить, буквально заменив какую-то переменную...
не, ну можно и так
На уровне шаблона приходит уже весь текст после обработки плагинами
а вот в модели статьи можно делать многое
Но аккуратно, при обновлении все потеряется, потому надежнее плагином (но и чуть сложнее)

Но еще проще, если я правильно понимаю суть
Мне нужно, чтобы ссылка «Х комментариев» выводилась не в интротексте, а за его пределами, рядом с «Подробнее»
На уровне шаблона контента проверить, есть ли комментарии и вывести ссылку
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн Takohashi

beliyadm, спасибо за помощь. Сейчас решил проблему, причём решил элементарно. Как я уже говорил, в файле listing.php к интротексту добавляется ссылка на комментарии, вот тамошний код:
Код: (php) [Выделить]
<a class="jwDisqusListingCounterLink" href="<?php echo $output->itemURL?>#disqus_thread" title="<?php echo JText::_("JW_DISQUS_ADD_A_COMMENT"); ?>" data-disqus-identifier="<?php echo $output->disqusIdentifier?>">
<?php echo JText::_("JW_DISQUS_ADD_A_COMMENT"); ?>
</a>
Я всего навсего скопировал этот код в нужное место в defaul_item.php, исправив $output->itemURL и $output->disqusIdentifier:
Код: (php) [Выделить]
<a class="jwDisqusListingCounterLink" href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug$this->item->catid)); ?>#disqus_thread" title="<?php echo JText::_("JW_DISQUS_ADD_A_COMMENT"); ?>" data-disqus-identifier="<?php echo substr(md5('MY_DISQUS_DOMAIN'), 010).'_id'.$this->item->id?>">
<?php echo JText::_("JW_DISQUS_ADD_A_COMMENT"); ?>
</a>
В результате ссылка выводится ровно такого же вида, как и плагином, но как я и хотел — за пределами интротекста. Только есть единственное НО — что в моём варианте, что ссылка из плагина, не всегда корректно отображается кол-во комментариев. Не знаю, то ли где-то кэшируется, то ли из-за того, что на локалхосте работает.

*

Оффлайн bb777

А нет ли готового решения в виде плагина?