Уникальные заголовки тип контента

InstantCMS 2.X

Добавляются дубли

#1 8 марта 2022 в 12:48

Всем привет!

С помощью планировщика добавляются записи в тип контента.

Создано условие, чтобы не добавлялись записи с одинаковым заголовком (title)

  1. return $this->filterLike('title', "%{$title}%")->getItem('con_content');

Так же пробовал делать такую проверку

  1. return $this->filterEqual('title', $title)->getItem('con_content');

Если запись находится, записывается лог и добавление отменяется. 

Проблема в том, что некоторые записи все равно добавляются с одинаковым названием, и потом при поиске дублей можно найти все эти записи. Названия полностью одинаковые. Подскажите, в чем может быть проблема?

#2 8 марта 2022 в 14:07

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

#3 8 марта 2022 в 15:03

Возможно длинные названия обрезаются и поэтому ищется по длинному и записывается очередное короткое.

Loadырь

Не совсем тут Вас понял. Названия не обрезаются, точно такие же!

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

Loadырь

Да, они присутствуют, но сравнивал до внесения в базу и после — названия идентичные!

#4 8 марта 2022 в 15:36

Не совсем тут Вас понял.

Вадим Нарочный

Условно говоря, на сайте-доноре берется заголовок. Его длина составляет 150 символов. На вашем сайте в базу может влезть только 100 символов. В этом случае заголовок обрезается со 150 до 100 символов. В итоге при проверке ищутся заголовки длиной 150 символов, а там только длиной 100 символов, поэтому их и не находит. И как следствие пишутся в базу новые записи.

#5 8 марта 2022 в 16:57

Условно говоря, на сайте-доноре берется заголовок. Его длина составляет 150 символов. На вашем сайте в базу может влезть только 100 символов. В этом случае заголовок обрезается со 150 до 100 символов. В итоге при проверке ищутся заголовки длиной 150 символов, а там только длиной 100 символов, поэтому их и не находит. И как следствие пишутся в базу новые записи.

Loadырь

Понял. Но нет, заголовки у донора и в базе одинаковой длины.

Добавлено спустя 29 минут

Сделал проверку, как это делает система:

  1. $this->cms_core->db->isFieldUnique('con_content', 'title', $title);

всё равно добавляются с одинаковым названием(

Добавлено спустя 20 минут

Заметил что в названиях, которые не проходят проверку на уникальность, есть символ "&". Думаю проблема в этом. Но в БД в записи тоже есть эти символы.

Добавлено спустя 3 минуты

Когда запускаешь функцию isFieldUnique в ручную, то названия находятся!

Добавлено спустя 23 минуты

Нашел решение проблемы. Обработал название функцией htmlspecialchars_decode

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.