Как реализовать подсчет количества символов?
        Приветствую.
Подскажите как в 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
Готового решения не опубликовано ни по одной ссылке, хоть оно и простое.
                    Готового решения не опубликовано ни по одной ссылке, хоть оно и простое.
                В общем, выше было три или четыре рабочих варианта. Если вы в них не увидели вам подходящего, пользуйтесь пятым/третьим вариантом Павла)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.