Как реализовать подсчет количества символов?

Приветствую.
Подскажите как в MODx revolution организовать подсчет количества символов в содержимом ресурса без пробелов, без тегов и их атрибутов, только текст и вывести количество символов через GetResources?
Имеются ли готовые решения, не требующие специальных знаний в PHP и JS?
weranda
25 июля 2015, 09:29
1
1 722
0

Комментарии: 27

Максим Кузнецов
25 июля 2015, 14:41
0
Как вариант могу предложить создать одно доп. тв-поле (числовое) для ресурса — чтобы не увеличивать время вызова со стороны пользователя, занимаясь подсчетом.

Далее, создаем плагин и подключаем его на событие OnDocFormSave:
if ($modx->event->name == 'OnDocFormSave') {

		//отсеиваем ненужные шаблоны, оставляя только тот, где требуется произвести подсчет
		if ($resource->get('template') == "айди_шаблона") {

			//вырезаем все теги, затем пробелы и под конец считаем кол-во символов и заносим их в соответствующее тв-поле
			$resource->setTVValue('название_тв_с_числом_символов', strlen(str_replace(' ', '', strip_tags($resource->getContent(), '') ) ) );
			$resource->save();
		}
	}

И выводите созданное тв-поле в любом желаемом месте.
Павел Романов
25 июля 2015, 15:53
0
А не проще модификатором?
Сниппет «strlen»
<?php
return strlen(str_replace(' ', '', strip_tags($input)));
Ну и где угодно:
[[*content:strlen]]
[[+content:strlen]]
[[*любой_ТВ:strlen]]
[[+tv.любой_ТВ:strlen]]
    Максим Кузнецов
    25 июля 2015, 16:38
    0
    Да, можно и так, но, имхо, это лишняя динамичная нагрузка, которую незачем воспроизводить каждый раз при отображении + в GetResources придется обязательно выставлять includeContent, который сам по себе может не использоваться.

    Впрочем, если требуется считать кол-во символов более, чем у одного поля — этот вариант действительно удобнее.
      weranda
      25 июля 2015, 18:06
      0
      Спасибо и вам, Максим.
      Сообщение которое вы написали «Сам по себе этот модификатор вернет длину всей строки, с учетом пробелов и хтмл-кода...», почему то не отобразилось на сайте. Нашел его на почте. Все прекрасно работает. Благодарю!
    weranda
    25 июля 2015, 16:51
    0
    Попробовал второй вариант. Создал сниппет с указанным вами кодом. Вставил в содержимое ресурса, работает корректно в нем, но если добавляю вывод сниппета через шаблон 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 символов

    В чем ошибка?
      Павел Романов
      25 июля 2015, 17:10
      1
      0
      В вызов getResources добавьте
      &includeContent=`1`
      А лучше поставьте pdoTools и используйте pdoResources вместо getResources — сильно быстрее будет.
        weranda
        25 июля 2015, 17:39
        0
        Павел, благодарю вас. Количество подсчитывается, но подсчитывается вместе с тегами. Как можно исключить теги? Hодскажите пожалуйста/
          Павел Романов
          25 июля 2015, 17:57
          0
          С какими тегами?
            weranda
            25 июля 2015, 17:58
            0
            В самом начале писал:
            Подскажите как в MODx revolution организовать подсчет количества символов в содержимом ресурса без пробелов, без тегов и их атрибутов, только текст...
            Т.е. нужно получить чистое количество символов содержимого ресурса без HTML тегов разметки:
            <p>
            <p class=xxx">
            <div id="xxx">
            и прочего
              Павел Романов
              25 июля 2015, 18:06
              0
              Ок, попробуйте так:
              <?php
              $str = strip_tags($input);
              $str = str_replace(' ', '', $str);
              return strlen($str);
              Максим Кузнецов
              25 июля 2015, 18:07
              0
              Исправьте
              strip_tags($input)
              На
              strip_tags($input, '')
weranda
25 июля 2015, 17:50
0
Ха, вы будете удивлины, но сейчас наткнулся на фильтры вывода MODx и никаких сниппетов и плагинов для подсчета символов не нужно, но все таки он требуется для определения количества символов статьи без тегов. Что думаете по этому поводу?
И, как я понял, сниппет в данном случае, какой бы он ни был, перекрывается вызовом MODx. Или я чего то не понял, но сниппет strlen не отрабатывает, убирая теги из подсчета!?
    Павел Романов
    25 июля 2015, 18:01
    0
    Модификаторы len, length или strlen считают с пробелами.
    Ее все равно нужно обработать.
    Да, кстати, нужно как-нить по-другому сниппет-модификатор называть, а то strlen — стандартный )))
weranda
25 июля 2015, 18:06
0
Всем спасибо. Вопрос решен.
    Evgeny
    13 июня 2019, 12:14
    0
    Вот почему люди задают интересный и насущный вопрос, идет бурное обсуждение, а потом говорят «Всем спасибо, вопрос решен» и сливаются без поста с решением?

    А решен как, может подскажете? ;)
      weranda
      13 июня 2019, 12:29
      0
      Выше дал уже ответ: фильтры вывода MODx.
        Evgeny
        13 июня 2019, 12:32
        0
        Почему бы не опубликовать готовый код решения, а не отсылать на другой сайт?
        В ведь вам не ссылками отвечали на вопросы…
        Было бы полезно и людям, и для ресурса.
          weranda
          13 июня 2019, 12:37
          0
          Потому что там все написано и расшифровано.
            Evgeny
            13 июня 2019, 12:41
            0
            Ну вы то сами изначально неправильно поняли и вам тыкнули в ошибку пальцем. И не давали ссылок… вам помогли, а вы не хотите. Помощь – это дело, конечно, добровольное.
          Павел Романов
          13 июня 2019, 12:39
          0
          А почему бы не зайти в раздел документации прямо на этом сайте и не посмотреть в «Основы»?
          Там про фильтры вывода вагон и маленькая тележка, да еще и с примерами )).
            Evgeny
            13 июня 2019, 12:42
            0
            Вы же сами писали, что «Модификаторы len, length или strlen считают с пробелами.»
            Evgeny
            13 июня 2019, 12:45
            0
            Человек задал конкретный вопрос, ему дали подсказку, он сделал решение. Почему бы это решение не вывести на всеобщее обозрение? Я не понимаю, почему это так сложно? Сделать это и облегчить работу для других разработчиков. Он и сам то не сразу понял, как правильно делать. Так бы время и силы экономили. Но можно, конечно, возомнить себя крутыми разработчиками и зажать решение для, типа, ламеров…
              Павел Романов
              13 июня 2019, 12:55
              0
              Понимаете, это решение лежит в сфере основ MODX и, честно говоря, странно видеть, что некоторые разработчики считают выше своего достоинства открыть хоть раз документацию и прочитать про азы системы (а это именно азы, как и синтаксис тегов).
              Речь же не про расширения классов mFilters или реализации какого-то нестандартного функционала.

              Код убирается striptags, пробелы replace. Оставшиеся символы подсчитываются тем же strlen:
              [[+longstring:striptags:replace=` ==`:strlen]]

              Можете сами написать элементарный модификатор, основываясь на той же документации, тем более, что он уже есть в этой ветке.
                Evgeny
                13 июня 2019, 13:08
                0
                Спасибо, что озвучили решение.

                Мне кажется, логично его озвучить в готовом виде, пусть оно и простое. Тем более, что даже автор вопроса, несмотря на то, что считает себя разработчиком, допустил ошибки и не сразу дошел до решения.
              weranda
              13 июня 2019, 12:56
              0
              Выше есть несколько конкретных решений. Специально для вас: два предельно ясных варианта, готовых, дал Павел Романов. Я же лишь привел ссылку тоже на готовое решение с примерами. Зачем их дублировать — я не понимаю.
                Evgeny
                13 июня 2019, 13:10
                0
                Предельно ясно – это когда вам разжевывают решение или указывают на ошибки modx.pro/help/6105#comment-43420

                Готового решения не опубликовано ни по одной ссылке, хоть оно и простое.
                  weranda
                  13 июня 2019, 13:31
                  0
                  В общем, выше было три или четыре рабочих варианта. Если вы в них не увидели вам подходящего, пользуйтесь пятым/третьим вариантом Павла)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.