Рейтинг:0

Сохранить количество слов в текстовой области программно

флаг cn

Я пытаюсь вести подсчет слов в наборе длинных текстовых полей. Насколько я вижу, есть несколько вариантов:

  1. Создайте представление и добавьте php в пользовательский шаблон, который производит подсчет слов. Большинство решений, которые я нашел, слишком ссылаются на этот выпуск 2005 года, который значительно устарел.

Это было бы жизнеспособным решением, за исключением того, что ни один из перечисленных вариантов кода не работает, и я недостаточно разбираюсь в своих php или jquery, чтобы самостоятельно обновить их до D7. Я пробовал это:

<?php $wordcount = " | ".count(explode(" ", strip_tags(trim($content))))." words" ; ?>

Но я получаю ошибку недопустимой переменной.

  1. В нижней части той же проблемы есть решение D6, которое сохраняет количество слов всякий раз, когда узел сохраняется:
function od_tweaks_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  if ($op == "insert") { // Сохраняем количество слов
    $тело = $узел->тело;
    $word_count = count(explode(" ", strip_tags(trim($body))));
    $нид = $узел->нид;
    db_query("ВСТАВИТЬ В {od_tweaks} (nid, wordcount) VALUES ($nid, $word_count)");
  } иначе если ($op == "обновить") {
    $тело = $узел->тело;
    $word_count = count(explode(" ", strip_tags(trim($body))));
    $нид = $узел->нид;
    db_query("ОБНОВЛЕНИЕ {od_tweaks} SET wordcount = $word_count WHERE nid = $nid");
  }
}
  1. Используйте модуль, которого я бы предпочел избежать. Кроме того, большинство модулей подсчета слов D7 уже устарели. Количество слов кажется, не очень много и нет документации. Проверка поля требует нескольких модулей и изрядной суеты. Это похоже на тяжелое решение проблемы с легким кодом. Большинство других решений, которые я нашел, производят подсчет слов для активного поля, но не сохраняют и не комбинируют.

Рассматриваемые поля могут обновляться вместе с полным узлом или обновляться через редактируемые поля, поэтому я думаю, что лучший способ — это либо крючок, либо jquery, который пересчитывает слова каждый раз, когда поле обновляется, а затем сохраняет это значение в новое поле. Учитывая мой вариант использования, это даст мне возможность добавлять и комбинировать значения количества слов различными способами.

Итак, похоже, что вариант 2 является правильным направлением, но код устарел. Есть ли лучший способ сделать это в D7?

флаг cn
«Набор длинных текстовых полей» — это все в одном объекте? Или они распределены между несколькими объектами, связанными ссылкой на объект или чем-то подобным? Кроме того, насколько точным должен быть подсчет слов?
флаг cn
Тот же тип объекта и то же имя поля, но извлекаемые из коллекции пользовательских материалов. Например, если пользователь отправил серию сообщений в блоге, мне нужно иметь возможность подсчитывать и отображать количество слов для каждого из них, а также для всего набора. С этим связана структура оплаты за слово, поэтому она должна быть точной.
флаг in
Вы можете посмотреть https://www.drupal.org/project/computed_field. Модуль позволяет добавить скрытое поле, сохраненное значение которого вычисляется программно с помощью кода, который вы для него определили. Оттуда поле можно использовать в другом месте, как обычное поле. Кроме того, в Drupal есть встроенные способы создания вычисляемых полей, хотя вам придется немного покопаться. См. https://www.drupal.org/docs/drupal-apis/entity-api/dynamicvirtual-field-values-using-computed-field-property-classes
флаг cn
Спасибо. Думаю, я уже иду в этом направлении. Я почти добрался туда, используя https://www.drupal.org/project/read_time/, но они поддерживают только узлы контента, и мне нужно взять текст из форм сущностей.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.