add: автозаполнение SEO-полей для блога

This commit is contained in:
2026-05-11 00:18:36 +03:00
parent dc379fa8da
commit bcc8c56970

View File

@@ -1064,6 +1064,52 @@ class BlogPosts(models.Model):
def __str__(self): def __str__(self):
return self.__unicode__() 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
# Удаляем теги <cut> из контента
content_clean = re.sub(r'<cut[\s\S]*?>', '', 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: class Meta:
# db_table = "jtb_BlogPost" # db_table = "jtb_BlogPost"
verbose_name = u"Запись в блоге каталоге" verbose_name = u"Запись в блоге каталоге"