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

Приветствую.
Подскажите как в MODx revolution организовать подсчет количества символов в содержимом ресурса без пробелов, без тегов и их атрибутов, только текст и вывести количество символов через GetResources?
Имеются ли готовые решения, не требующие специальных знаний в PHP и JS?
weranda
25 июля 2015, 09:29
modx.pro
1
3 431
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
                                  В общем, выше было три или четыре рабочих варианта. Если вы в них не увидели вам подходящего, пользуйтесь пятым/третьим вариантом Павла)
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    27