Как реализовать подсчет количества символов?
Приветствую.
Подскажите как в MODx revolution организовать подсчет количества символов в содержимом ресурса без пробелов, без тегов и их атрибутов, только текст и вывести количество символов через GetResources?
Имеются ли готовые решения, не требующие специальных знаний в PHP и JS?
Подскажите как в MODx revolution организовать подсчет количества символов в содержимом ресурса без пробелов, без тегов и их атрибутов, только текст и вывести количество символов через GetResources?
Имеются ли готовые решения, не требующие специальных знаний в PHP и JS?
Комментарии: 27
Как вариант могу предложить создать одно доп. тв-поле (числовое) для ресурса — чтобы не увеличивать время вызова со стороны пользователя, занимаясь подсчетом.
Далее, создаем плагин и подключаем его на событие OnDocFormSave:
И выводите созданное тв-поле в любом желаемом месте.
Далее, создаем плагин и подключаем его на событие OnDocFormSave:
if ($modx->event->name == 'OnDocFormSave') {
//отсеиваем ненужные шаблоны, оставляя только тот, где требуется произвести подсчет
if ($resource->get('template') == "айди_шаблона") {
//вырезаем все теги, затем пробелы и под конец считаем кол-во символов и заносим их в соответствующее тв-поле
$resource->setTVValue('название_тв_с_числом_символов', strlen(str_replace(' ', '', strip_tags($resource->getContent(), '') ) ) );
$resource->save();
}
}
И выводите созданное тв-поле в любом желаемом месте.
А не проще модификатором?
Сниппет «strlen»
Сниппет «strlen»
<?php
return strlen(str_replace(' ', '', strip_tags($input)));
Ну и где угодно:[[*content:strlen]]
[[+content:strlen]]
[[*любой_ТВ:strlen]]
[[+tv.любой_ТВ:strlen]]
Да, можно и так, но, имхо, это лишняя динамичная нагрузка, которую незачем воспроизводить каждый раз при отображении + в GetResources придется обязательно выставлять includeContent, который сам по себе может не использоваться.
Впрочем, если требуется считать кол-во символов более, чем у одного поля — этот вариант действительно удобнее.
Впрочем, если требуется считать кол-во символов более, чем у одного поля — этот вариант действительно удобнее.
Спасибо и вам, Максим.
Сообщение которое вы написали «Сам по себе этот модификатор вернет длину всей строки, с учетом пробелов и хтмл-кода...», почему то не отобразилось на сайте. Нашел его на почте. Все прекрасно работает. Благодарю!
Сообщение которое вы написали «Сам по себе этот модификатор вернет длину всей строки, с учетом пробелов и хтмл-кода...», почему то не отобразилось на сайте. Нашел его на почте. Все прекрасно работает. Благодарю!
Попробовал второй вариант. Создал сниппет с указанным вами кодом. Вставил в содержимое ресурса, работает корректно в нем, но если добавляю вывод сниппета через шаблон GetResources, то у выводимых материалов везде нули.
Есть ресурс, в нем вызов GetResources:
Шаблон вызова GetResources (чанк):
Результат:
По идее должно выводится:
В чем ошибка?
Есть ресурс, в нем вызов GetResources:
[[getResources? &tpl=`myTpl` &limit=`50` &parents=`2`]]
Шаблон вызова GetResources (чанк):
<p>
[[+pagetitle]] - [[+content:strlen]]
</p>
Результат:
заголовок1 - 0 символов
заголовок2 - 0 символов
заголовок3 - 0 символов
...
По идее должно выводится:
заголовок1 - n символов
заголовок2 - n символов
заголовок3 - n символов
В чем ошибка?
В вызов getResources добавьте
&includeContent=`1`
А лучше поставьте pdoTools и используйте pdoResources вместо getResources — сильно быстрее будет.
Павел, благодарю вас. Количество подсчитывается, но подсчитывается вместе с тегами. Как можно исключить теги? Hодскажите пожалуйста/
С какими тегами?
В самом начале писал:
Подскажите как в MODx revolution организовать подсчет количества символов в содержимом ресурса без пробелов, без тегов и их атрибутов, только текст...Т.е. нужно получить чистое количество символов содержимого ресурса без HTML тегов разметки:
<p>
<p class=xxx">
<div id="xxx">
и прочего
Ок, попробуйте так:
<?php
$str = strip_tags($input);
$str = str_replace(' ', '', $str);
return strlen($str);
Исправьте
strip_tags($input)
Наstrip_tags($input, '')
Ха, вы будете удивлины, но сейчас наткнулся на фильтры вывода MODx и никаких сниппетов и плагинов для подсчета символов не нужно, но все таки он требуется для определения количества символов статьи без тегов. Что думаете по этому поводу?
И, как я понял, сниппет в данном случае, какой бы он ни был, перекрывается вызовом MODx. Или я чего то не понял, но сниппет strlen не отрабатывает, убирая теги из подсчета!?
И, как я понял, сниппет в данном случае, какой бы он ни был, перекрывается вызовом MODx. Или я чего то не понял, но сниппет strlen не отрабатывает, убирая теги из подсчета!?
Модификаторы len, length или strlen считают с пробелами.
Ее все равно нужно обработать.
Да, кстати, нужно как-нить по-другому сниппет-модификатор называть, а то strlen — стандартный )))
Ее все равно нужно обработать.
Да, кстати, нужно как-нить по-другому сниппет-модификатор называть, а то strlen — стандартный )))
Всем спасибо. Вопрос решен.
Вот почему люди задают интересный и насущный вопрос, идет бурное обсуждение, а потом говорят «Всем спасибо, вопрос решен» и сливаются без поста с решением?
А решен как, может подскажете? ;)
А решен как, может подскажете? ;)
Выше дал уже ответ: фильтры вывода MODx.
Почему бы не опубликовать готовый код решения, а не отсылать на другой сайт?
В ведь вам не ссылками отвечали на вопросы…
Было бы полезно и людям, и для ресурса.
В ведь вам не ссылками отвечали на вопросы…
Было бы полезно и людям, и для ресурса.
Потому что там все написано и расшифровано.
Ну вы то сами изначально неправильно поняли и вам тыкнули в ошибку пальцем. И не давали ссылок… вам помогли, а вы не хотите. Помощь – это дело, конечно, добровольное.
А почему бы не зайти в раздел документации прямо на этом сайте и не посмотреть в «Основы»?
Там про фильтры вывода вагон и маленькая тележка, да еще и с примерами )).
Там про фильтры вывода вагон и маленькая тележка, да еще и с примерами )).
Вы же сами писали, что «Модификаторы len, length или strlen считают с пробелами.»
Человек задал конкретный вопрос, ему дали подсказку, он сделал решение. Почему бы это решение не вывести на всеобщее обозрение? Я не понимаю, почему это так сложно? Сделать это и облегчить работу для других разработчиков. Он и сам то не сразу понял, как правильно делать. Так бы время и силы экономили. Но можно, конечно, возомнить себя крутыми разработчиками и зажать решение для, типа, ламеров…
Понимаете, это решение лежит в сфере основ MODX и, честно говоря, странно видеть, что некоторые разработчики считают выше своего достоинства открыть хоть раз документацию и прочитать про азы системы (а это именно азы, как и синтаксис тегов).
Речь же не про расширения классов mFilters или реализации какого-то нестандартного функционала.
Код убирается striptags, пробелы replace. Оставшиеся символы подсчитываются тем же strlen:
Можете сами написать элементарный модификатор, основываясь на той же документации, тем более, что он уже есть в этой ветке.
Речь же не про расширения классов mFilters или реализации какого-то нестандартного функционала.
Код убирается striptags, пробелы replace. Оставшиеся символы подсчитываются тем же strlen:
[[+longstring:striptags:replace=` ==`:strlen]]
Можете сами написать элементарный модификатор, основываясь на той же документации, тем более, что он уже есть в этой ветке.
Спасибо, что озвучили решение.
Мне кажется, логично его озвучить в готовом виде, пусть оно и простое. Тем более, что даже автор вопроса, несмотря на то, что считает себя разработчиком, допустил ошибки и не сразу дошел до решения.
Мне кажется, логично его озвучить в готовом виде, пусть оно и простое. Тем более, что даже автор вопроса, несмотря на то, что считает себя разработчиком, допустил ошибки и не сразу дошел до решения.
Выше есть несколько конкретных решений. Специально для вас: два предельно ясных варианта, готовых, дал Павел Романов. Я же лишь привел ссылку тоже на готовое решение с примерами. Зачем их дублировать — я не понимаю.
Предельно ясно – это когда вам разжевывают решение или указывают на ошибки modx.pro/help/6105#comment-43420
Готового решения не опубликовано ни по одной ссылке, хоть оно и простое.
Готового решения не опубликовано ни по одной ссылке, хоть оно и простое.
В общем, выше было три или четыре рабочих варианта. Если вы в них не увидели вам подходящего, пользуйтесь пятым/третьим вариантом Павла)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.