Николай Ланец
1 сент. 2014 г., 0:47

Разрыв страницы pagebreak

Возникла тут на одном проекте вот такая задачка: чтобы на странице выводился не сразу весь контент (содержимое поля content), а только его часть, и с этим была кнопочка "Подробнее". При этом это будет только на некоторых страницах, а не на всех, и кнопка "Подробнее" не должна вести на отдельную страницу, а просто прям здесь же на странице блок раскрывался.
Сначала я не увидел в этой задачке ничего необычного, но когда приступил к выполнению кое-что нестандартное все-таки заметил, а именно то, что надо разбивать контент на части, ведь надо выводить сначала только часть его, и лишь потом все остальное. Первым делом в голову пришла идея завести дополнительное поле или использовать introtext, но сразу же пришел к выводу, что это не вариант как минимум из-за неудобства. И тут пришла мысль на счет разделителя страницы, ведь должна же быть такая кнопка в TinyCME...
Оказывается действительно есть :) Включить ее просто: идем в настройки MODX-а, выбираем неймспейс tinymce и там в поля tiny.custom_buttons2 и tiny.custom_plugins добавляем pagebreak (конечно кнопку может каждый вставить в удобное ему место, а не обязательно во второй ряд в начало). http://joxi.ru/sMADVP3JTJDzNG1wlOs
Теперь в редакторе контента у нас появится кнопочка-разделитель. http://joxi.ru/48ADVIwyTJDIAsedz_o
А далее уже дело техники. Остается только в шаблоне разбить контент методом explode() и все. Вот мой код в Smarty-шаблоне:
{$breaked = explode('<p><!-- pagebreak --></p>', $modx->resource->content)} {if count($breaked) > 1} {$breaked.0} <div id="hidden_content" style="margin:20px 0 0;">{$breaked.1}</div> <div style="overflow:hidden;"> <a href="javascript:;" onclick="$('#hidden_content').toggle();$(this).hide();" class="goto_good round" style="float: right;">Подробнее</a> </div> <script type="text/javascript"> $('#hidden_content').hide(); </script> {else} {$modx->resource->content} {/if}
Обратите внимание, что в explode() я написал именно <p><!-- pagebreak --></p>, а не просто <!-- pagebreak -->. Дело в том, что TinyMCE автоматически строку оборачивает в теги <p></p> и при разбивке получится не закрытый параграф.
Пригодится а то всё для принтеро только юзал )))
в pdf генерации тоже помогает. Спасибо! Кстати у вас всего один час разницы ))))

Добавить комментарий