From bcc8c569705bd2071b536f473fcc573bf8263b4e Mon Sep 17 00:00:00 2001 From: erjemin Date: Mon, 11 May 2026 00:18:36 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20SEO-=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oknardia/oknardia/models.py | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/oknardia/oknardia/models.py b/oknardia/oknardia/models.py index 734a82a..4e9ec69 100644 --- a/oknardia/oknardia/models.py +++ b/oknardia/oknardia/models.py @@ -1064,6 +1064,52 @@ class BlogPosts(models.Model): def __str__(self): return self.__unicode__() + def save(self, *args, **kwargs): + """Переопределённый метод save() для автоматической генерации слага и SEO-полей. + + При сохранении записи блога: + - Генерируется sSlug из sPostHeader если тот пуст + - Генерируется sMetaDescription из текста контента (тизер) + - Генерируется sMetaKeywords из заголовка + """ + # Шаг 1: Автоматически генерируем слаг из заголовка, если он не указан + if not self.sSlug and self.sPostHeader: + from web.add_func import sanitize_slug + self.sSlug = sanitize_slug(self.sPostHeader, max_length=200) + + # Шаг 2: Автоматически генерируем sMetaDescription из контента (тизер) + if not self.sMetaDescription and self.sPostContent: + import re + from web.add_func import sanitize_slug + + # Удаляем теги из контента + content_clean = re.sub(r'', '', self.sPostContent, flags=re.IGNORECASE) + + # Генерируем тизер (очищенный текст без HTML) + tizer = sanitize_slug(content_clean, max_length=200) + + # Обрезаем до 160 символов для мета-description + if len(tizer) > 160: + # Обрезаем слово целиком (не посередине) + tizer = tizer[:160].rsplit(' ', 1)[0] + '...' if ' ' in tizer[:160] else tizer[:160] + + self.sMetaDescription = tizer + + # Шаг 3: Автоматически генерируем sMetaKeywords из заголовка + if not self.sMetaKeywords and self.sPostHeader: + from web.add_func import sanitize_slug + import re + + # Берём заголовок и удаляем HTML-теги + header_clean = re.sub(r'<[^>]+>', '', self.sPostHeader) + header_clean = header_clean.strip() + + # Генерируем ключевые слова: фиксированные + заголовок + fixed_keywords = u"oknardia, окнардия, блог, публикация" + self.sMetaKeywords = f"{fixed_keywords}, {header_clean}"[:256] + + super().save(*args, **kwargs) + class Meta: # db_table = "jtb_BlogPost" verbose_name = u"Запись в блоге каталоге"