software:nas:nas_ds420_mediacms_dsm_7_admins_docs
Различия
Показаны различия между двумя версиями страницы.
| software:nas:nas_ds420_mediacms_dsm_7_admins_docs [2025/03/09 17:22] – создано vladpolskiy | software:nas:nas_ds420_mediacms_dsm_7_admins_docs [2025/03/09 17:58] (текущий) – vladpolskiy | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ======MediaCMS установка в VMM DSM 7.2====== | + | ======MediaCMS |
| + | =====1. Добро пожаловать===== | ||
| + | Эта страница создана для администраторов MediaCMS, | ||
| + | |||
| + | =====2. Установка сервера===== | ||
| + | Основные зависимости: | ||
| + | |||
| + | Установка в системе Ubuntu с установленной утилитой git должна быть завершена за несколько минут с помощью следующих шагов. Убедитесь, | ||
| + | |||
| + | Автоматизированный скрипт — протестирован на Ubuntu 20, Ubuntu 22 и Debian Buster | ||
| + | < | ||
| + | mkdir / | ||
| + | git clone https:// | ||
| + | cd / | ||
| + | </ | ||
| + | Скрипт спросит, | ||
| + | |||
| + | Обновлять | ||
| + | Если вы использовали описанный выше способ установки MediaCMS, выполните обновление следующим образом: | ||
| + | < | ||
| + | cd / | ||
| + | source | ||
| + | git pull # update code | ||
| + | pip install -r requirements.txt -U # run pip install to update | ||
| + | python manage.py migrate # run Django migrations | ||
| + | sudo systemctl restart mediacms celery_long celery_short # restart services | ||
| + | </ | ||
| + | Обновление с версии 2 до версии 3 | ||
| + | Версия 3 использует Django 4 и Celery 5 и требует последней версии Python 3.x. Если вы обновляете более старую версию, | ||
| + | < | ||
| + | # cp deploy/ | ||
| + | # cp deploy/ | ||
| + | # cp deploy/ | ||
| + | # systemctl daemon-reload | ||
| + | # systemctl start celery_long celery_short celery_beat | ||
| + | </ | ||
| + | ===Конфигурация=== | ||
| + | Ознакомьтесь с разделом конфигурации здесь. | ||
| + | |||
| + | ===Обслуживание=== | ||
| + | Резервную копию базы данных можно создать с помощью pg_dump и media_files в / | ||
| + | |||
| + | =====3. Установка докера===== | ||
| + | ===Установка=== | ||
| + | Установите последнюю версию Docker и Docker Compose . | ||
| + | |||
| + | Для систем Ubuntu 20/22 это: | ||
| + | < | ||
| + | curl -fsSL https:// | ||
| + | sudo sh get-docker.sh | ||
| + | sudo curl -L " | ||
| + | sudo chmod +x / | ||
| + | </ | ||
| + | Затем запустите как root | ||
| + | < | ||
| + | git clone https:// | ||
| + | cd mediacms | ||
| + | </ | ||
| + | По умолчанию MediaCMS обслуживается на всех доступных IP-адресах сервера (включая localhost). Если вы хотите изучить больше вариантов (включая настройку https с сертификатом letsencrypt), | ||
| + | |||
| + | ==RUN== | ||
| + | < | ||
| + | docker-compose up | ||
| + | </ | ||
| + | Это загрузит все связанные с MediaCMS образы Docker и запустит все контейнеры. После завершения MediaCMS будет установлен и доступен на http:// | ||
| + | |||
| + | Пользователь admin был создан со случайным паролем, | ||
| + | < | ||
| + | migrations_1 | ||
| + | </ | ||
| + | или если вы установили переменную ADMIN_PASSWORD в файле docker-compose, | ||
| + | |||
| + | ===Обновлять=== | ||
| + | Получите последний образ MediaCMS и остановите/ | ||
| + | < | ||
| + | cd / | ||
| + | docker pull mediacms/ | ||
| + | docker-compose down | ||
| + | docker-compose up | ||
| + | </ | ||
| + | ===Обновление с версии 2 до версии 3=== | ||
| + | Версия 3 использует Python 3.11 и PostgreSQL 15. Если вы обновляете более старую версию, | ||
| + | < | ||
| + | db_1 | 2023-06-27 11: | ||
| + | db_1 | 2023-06-27 11: | ||
| + | </ | ||
| + | На этом этапе есть два варианта: | ||
| + | |||
| + | ====Конфигурация==== | ||
| + | Ознакомьтесь с документацией по конфигурации здесь. | ||
| + | |||
| + | ===Обслуживание=== | ||
| + | База данных хранится в ../ | ||
| + | |||
| + | =====4. Варианты развертывания Docker===== | ||
| + | Образ mediacms создан для использования supervisord в качестве основного процесса, | ||
| + | |||
| + | * ENABLE_UWSGI | ||
| + | * ENABLE_NGINX | ||
| + | * ENABLE_CELERY_BEAT | ||
| + | * ENABLE_CELERY_SHORT | ||
| + | * ENABLE_CELERY_LONG | ||
| + | * ENABLE_MIGRATIONS | ||
| + | По умолчанию все эти службы включены, | ||
| + | |||
| + | Также см. '' | ||
| + | |||
| + | См. примеры развертываний в разделах ниже. Эти примеры развертываний были протестированы при docker-compose version 1.27.4запуске наDocker version 19.03.13 | ||
| + | |||
| + | Для запуска обновите указанные выше конфигурации, | ||
| + | |||
| + | ===Простое развертывание, | ||
| + | Основной контейнер запускает миграции, | ||
| + | |||
| + | FRONTEND_HOST '' | ||
| + | |||
| + | ===Сервер с сертификатом ssl через службу letsencrypt, | ||
| + | Прежде чем попробовать это, убедитесь, | ||
| + | |||
| + | При этом методе используется такое развертывание . | ||
| + | |||
| + | Отредактируйте этот файл и установите '' | ||
| + | |||
| + | Отредактируйте '' | ||
| + | |||
| + | Теперь запустите docker-compose -f docker-compose-letsencrypt.yaml up, после завершения установки вы сможете получить доступ к https:// | ||
| + | |||
| + | ===Расширенное развертывание, | ||
| + | Здесь мы можем запустить 1 экземпляр mediacms_web с FRONTEND_HOST, | ||
| + | |||
| + | ===Расширенное развертывание с обратным прокси-сервером, | ||
| + | Здесь мы можем использовать jwilder/ | ||
| + | |||
| + | Расширенное развертывание с обратным прокси-сервером, | ||
| + | Обратный прокси-сервер ( jwilder/ | ||
| + | |||
| + | ===Масштабируемая архитектура развертывания (Docker, Swarm, Kubernetes)=== | ||
| + | Архитектура ниже обобщает все сценарии развертывания, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | =====5. Конфигурация===== | ||
| + | На сайте доступно несколько опций '' | ||
| + | |||
| + | Рекомендуется переопределить любой из них, добавив его в local_settings.py. | ||
| + | |||
| + | В случае установки на один сервер добавьте в cms/ | ||
| + | |||
| + | В случае установки docker compose добавьте в deploy/ | ||
| + | |||
| + | Для вступления любых изменений в силу потребуется перезапуск MediaCMS. | ||
| + | |||
| + | Установка на одном сервере: | ||
| + | < | ||
| + | #systemctl restart mediacms | ||
| + | </ | ||
| + | Установка Docker Compose: отредактируйте deploy/ | ||
| + | < | ||
| + | # | ||
| + | </ | ||
| + | ====5.1 Изменить логотип портала==== | ||
| + | Установите новый файл svg для белой темы ('' | ||
| + | |||
| + | ====5.2 Установить глобальное название портала==== | ||
| + | набор '' | ||
| + | < | ||
| + | PORTAL_NAME = 'my awesome portal' | ||
| + | </ | ||
| + | ====5.3 Контроль над тем, кто может добавлять медиафайлы==== | ||
| + | По умолчанию '' | ||
| + | |||
| + | * **email_verified**, | ||
| + | |||
| + | * **advancedUser**, | ||
| + | |||
| + | ====5.4 Каков рабочий процесс портала? | ||
| + | Переменная '' | ||
| + | |||
| + | * **public** — опция по умолчанию, | ||
| + | |||
| + | * **private** означает, | ||
| + | |||
| + | * **unlisted** означает, | ||
| + | |||
| + | ====5.5 Показать или скрыть кнопку «Войти»==== | ||
| + | для отображения кнопки: | ||
| + | < | ||
| + | LOGIN_ALLOWED = True | ||
| + | </ | ||
| + | чтобы скрыть кнопку: | ||
| + | < | ||
| + | LOGIN_ALLOWED = False | ||
| + | </ | ||
| + | ====5.6 Показать или скрыть кнопку «Регистрация»==== | ||
| + | для отображения кнопки: | ||
| + | < | ||
| + | REGISTER_ALLOWED = True | ||
| + | </ | ||
| + | чтобы скрыть кнопку: | ||
| + | < | ||
| + | REGISTER_ALLOWED = False | ||
| + | </ | ||
| + | ====5.7 Показать или скрыть кнопку загрузки медиафайлов==== | ||
| + | Показать: | ||
| + | < | ||
| + | UPLOAD_MEDIA_ALLOWED = True | ||
| + | </ | ||
| + | Чтобы скрыть: | ||
| + | < | ||
| + | UPLOAD_MEDIA_ALLOWED = False | ||
| + | </ | ||
| + | ====5.8 Показать или скрыть кнопки действий (нравится/ | ||
| + | Внесите изменения (True/ | ||
| + | < | ||
| + | - CAN_LIKE_MEDIA = True # whether the like media appears | ||
| + | - CAN_DISLIKE_MEDIA = True # whether the dislike media appears | ||
| + | - CAN_REPORT_MEDIA = True # whether the report media appears | ||
| + | - CAN_SHARE_MEDIA = True # whether the share media appears | ||
| + | </ | ||
| + | ====5.9 Показать или скрыть опцию загрузки на носителе==== | ||
| + | Редактировать templates/ | ||
| + | < | ||
| + | download: false | ||
| + | </ | ||
| + | ====5.10 Автоматически скрывать медиа при получении жалобы==== | ||
| + | установите небольшое число для переменной, | ||
| + | < | ||
| + | REPORTED_TIMES_THRESHOLD = 2 | ||
| + | </ | ||
| + | как только лимит достигнут, | ||
| + | |||
| + | ====5.11 Установка пользовательского сообщения на странице загрузки медиафайлов==== | ||
| + | это сообщение появится под формой перетаскивания медиафайлов | ||
| + | < | ||
| + | PRE_UPLOAD_MEDIA_MESSAGE = ' | ||
| + | </ | ||
| + | ====5.12 Установка настроек электронной почты==== | ||
| + | Установите правильные настройки для каждого провайдера | ||
| + | < | ||
| + | DEFAULT_FROM_EMAIL = ' | ||
| + | EMAIL_HOST_PASSWORD = ' | ||
| + | EMAIL_HOST_USER = ' | ||
| + | EMAIL_USE_TLS = True | ||
| + | SERVER_EMAIL = DEFAULT_FROM_EMAIL | ||
| + | EMAIL_HOST = ' | ||
| + | EMAIL_PORT = 587 | ||
| + | ADMIN_EMAIL_LIST = [' | ||
| + | </ | ||
| + | ====5.13 Запретить регистрацию пользователей из определенных доменов==== | ||
| + | Установите домены, | ||
| + | < | ||
| + | RESTRICTED_DOMAINS_FOR_USER_REGISTRATION = [ | ||
| + | ' | ||
| + | </ | ||
| + | В качестве альтернативы разрешите регистрацию только разрешенным доменам. Это может быть полезно, | ||
| + | < | ||
| + | ALLOWED_DOMAINS_FOR_USER_REGISTRATION = [ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | </ | ||
| + | ====5.14 Требовать проверки редакторами/ | ||
| + | установить значение | ||
| + | < | ||
| + | MEDIA_IS_REVIEWED = False | ||
| + | </ | ||
| + | Теперь все загруженные медиа должны быть проверены, | ||
| + | |||
| + | ====5.15 Укажите максимальное количество медиафайлов для списка воспроизведения==== | ||
| + | установить другой порог для переменной '' | ||
| + | |||
| + | например | ||
| + | < | ||
| + | MAX_MEDIA_PER_PLAYLIST = 14 | ||
| + | </ | ||
| + | ====5.16 Укажите максимальный размер медиафайла, | ||
| + | изменять '' | ||
| + | |||
| + | по умолчанию 4 ГБ | ||
| + | < | ||
| + | UPLOAD_MAX_SIZE = 800 * 1024 * 1000 * 5 | ||
| + | </ | ||
| + | ====5.17 Укажите максимальный размер комментариев==== | ||
| + | изменять '' | ||
| + | |||
| + | по умолчанию: | ||
| + | < | ||
| + | MAX_CHARS_FOR_COMMENT = 10000 | ||
| + | </ | ||
| + | ====5.18 Сколько файлов загружать параллельно==== | ||
| + | установите другой порог по '' | ||
| + | < | ||
| + | UPLOAD_MAX_FILES_NUMBER = 100 | ||
| + | </ | ||
| + | ====5.18 заставить пользователей подтвердить свой адрес электронной почты при регистрации==== | ||
| + | опция по умолчанию для подтверждения электронной почты необязательна. Установите ее как обязательную, | ||
| + | < | ||
| + | ACCOUNT_EMAIL_VERIFICATION = ' | ||
| + | </ | ||
| + | ====5.20 Ограничение количества попыток входа в учетную запись==== | ||
| + | после достижения этого числа | ||
| + | < | ||
| + | ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 20 | ||
| + | </ | ||
| + | устанавливает тайм-аут (в секундах) | ||
| + | < | ||
| + | ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 5 | ||
| + | </ | ||
| + | ====5.21 Запретить регистрацию пользователя==== | ||
| + | установите следующую переменную на False | ||
| + | < | ||
| + | USERS_CAN_SELF_REGISTER = True | ||
| + | </ | ||
| + | ====5.22 Настройка уведомлений==== | ||
| + | Реализованные глобальные уведомления контролируются следующими параметрами: | ||
| + | < | ||
| + | USERS_NOTIFICATIONS = { | ||
| + | ' | ||
| + | } | ||
| + | </ | ||
| + | Если вы хотите отключить уведомления о новых медиа, установите значение False. | ||
| + | |||
| + | Администраторы также получают уведомления о различных событиях. Чтобы отключить эти уведомления, | ||
| + | < | ||
| + | ADMINS_NOTIFICATIONS = { | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | </ | ||
| + | * NEW_USER: добавлен новый пользователь | ||
| + | * MEDIA_ADDED: | ||
| + | * MEDIA_REPORTED: | ||
| + | ====5.23 Настройте доступ к медиа только для участников==== | ||
| + | Сделайте рабочий процесс портала общедоступным, | ||
| + | Вы можете либо указать '' | ||
| + | ====5.24 Включить карту сайта==== | ||
| + | Включать или нет генерацию файла карты сайта по адресу http:// | ||
| + | < | ||
| + | GENERATE_SITEMAP = False | ||
| + | </ | ||
| + | ====5.25 Управление тем, кто может добавлять комментарии==== | ||
| + | По умолчанию '' | ||
| + | |||
| + | * **email_verified**, | ||
| + | |||
| + | * **advancedUser**, | ||
| + | |||
| + | =====6. Управление страницами===== | ||
| + | быть написанным | ||
| + | |||
| + | =====7. Панель администратора Django===== | ||
| + | =====8. Рабочий процесс портала===== | ||
| + | Кто может публиковать контент, | ||
| + | |||
| + | =====9. О ролях пользователей===== | ||
| + | Различия между менеджером MediaCMS, редактором MediaCMS и вошедшим в систему пользователем | ||
| + | |||
| + | =====10. Добавление языков для титров и субтитров===== | ||
| + | быть написанным | ||
| + | |||
| + | =====11. Добавить/ | ||
| + | Через раздел администратора - http:// | ||
| + | |||
| + | =====12. Транскодирование видео===== | ||
| + | Добавить/ | ||
| + | |||
| + | Например, | ||
| + | |||
| + | =====13. Как добавить статическую страницу на боковую панель===== | ||
| + | ===1. Создайте свою html-страницу в templates/ | ||
| + | например, | ||
| + | < | ||
| + | sudo cp templates/ | ||
| + | </ | ||
| + | ===2. Создайте свой CSS-файл в static/ | ||
| + | < | ||
| + | touch static/ | ||
| + | </ | ||
| + | ===3. В вашем HTML-файле обновите заголовок блока meta, чтобы отразить вашу новую страницу.=== | ||
| + | < | ||
| + | {% block headermeta %} | ||
| + | <meta property=" | ||
| + | <meta property=" | ||
| + | <meta property=" | ||
| + | <meta name=" | ||
| + | <script type=" | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }] | ||
| + | } | ||
| + | </ | ||
| + | <link href=" | ||
| + | {% endblock headermeta %} | ||
| + | </ | ||
| + | ===4. В вашем HTML-файле обновите блок innercontent, | ||
| + | Пишите, | ||
| + | |||
| + | ===5. В вашем CSS-файле пропишите соответствующие стили для вашего HTML-файла.=== | ||
| + | Пишите, | ||
| + | |||
| + | ===6. Добавьте свое представление в files/ | ||
| + | < | ||
| + | def volunteer(request): | ||
| + | """ | ||
| + | context = {} | ||
| + | return render(request, | ||
| + | </ | ||
| + | ===7. Добавьте свой шаблон URL в files/ | ||
| + | < | ||
| + | urlpatterns = [ | ||
| + | url(r" | ||
| + | url(r" | ||
| + | url(r" | ||
| + | </ | ||
| + | ===8. Добавьте свою страницу на левую боковую панель=== | ||
| + | Чтобы добавить ссылку на свою страницу в качестве пункта меню на левой боковой панели, | ||
| + | < | ||
| + | /* Checks that a given selector has loaded. */ | ||
| + | const checkElement = async selector => { | ||
| + | while ( document.querySelector(selector) === null) { | ||
| + | await new Promise( resolve => requestAnimationFrame(resolve) ) | ||
| + | } | ||
| + | return document.querySelector(selector); | ||
| + | }; | ||
| + | |||
| + | /* Checks that sidebar nav menu has loaded, then adds menu item. */ | ||
| + | checkElement(' | ||
| + | .then((element) => { | ||
| + | | ||
| + | var a = document.createElement(' | ||
| + | a.href = "/ | ||
| + | a.title = " | ||
| + | |||
| + | var s = document.createElement(' | ||
| + | s.className = " | ||
| + | |||
| + | var icon = document.createElement(' | ||
| + | icon.className = " | ||
| + | icon.setAttribute(" | ||
| + | |||
| + | s.appendChild(icon); | ||
| + | a.appendChild(s); | ||
| + | |||
| + | var linkText = document.createTextNode(" | ||
| + | var t = document.createElement(' | ||
| + | |||
| + | t.appendChild(linkText); | ||
| + | a.appendChild(t); | ||
| + | |||
| + | var listItem = document.createElement(' | ||
| + | listItem.className = " | ||
| + | listItem.appendChild(a); | ||
| + | |||
| + | //if signed out use 3rd nav-menu | ||
| + | var elem = document.querySelector(" | ||
| + | var loc = elem.innerText; | ||
| + | if (loc.includes(" | ||
| + | elem.insertBefore(listItem, | ||
| + | } else { //if signed in use 4th nav-menu | ||
| + | elem = document.querySelector(" | ||
| + | elem.insertBefore(listItem, | ||
| + | } | ||
| + | })(); | ||
| + | }); | ||
| + | </ | ||
| + | ===9. Перезапустите веб-сервер mediacms.=== | ||
| + | В докере: | ||
| + | < | ||
| + | sudo docker stop mediacms_web_1 && sudo docker start mediacms_web_1 | ||
| + | </ | ||
| + | В противном случае | ||
| + | < | ||
| + | sudo systemctl restart mediacms | ||
| + | </ | ||
| + | =====14. Добавьте Google Аналитику===== | ||
| + | Инструкции предоставлены @alberto98fx | ||
| + | |||
| + | Создайте файл: | ||
| + | < | ||
| + | touch $DIR/ | ||
| + | </ | ||
| + | Добавьте скрипт Gtag/ | ||
| + | |||
| + | Внутри | ||
| + | < | ||
| + | < | ||
| + | {% block head %} | ||
| + | |||
| + | < | ||
| + | |||
| + | {% include " | ||
| + | |||
| + | {% block headermeta %} | ||
| + | |||
| + | <meta property=" | ||
| + | <meta property=" | ||
| + | |||
| + | {%endblock headermeta %} | ||
| + | |||
| + | {% block externallinks %}{% endblock externallinks %} | ||
| + | |||
| + | {% include " | ||
| + | |||
| + | {% block topimports %}{%endblock topimports %} | ||
| + | |||
| + | {% include " | ||
| + | |||
| + | {% endblock head %} | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | Добавить '' | ||
| + | |||
| + | Если вы используете Docker и не смонтировали весь каталог, | ||
| + | |||
| + | < | ||
| + | web: | ||
| + | image: mediacms/ | ||
| + | restart: unless-stopped | ||
| + | ports: | ||
| + | - " | ||
| + | deploy: | ||
| + | replicas: 1 | ||
| + | volumes: | ||
| + | - ./ | ||
| + | - ./ | ||
| + | < | ||
| + | =====15. Устранение неполадок с электронной почтой===== | ||
| + | В разделе «Конфигурация» этого руководства мы увидели, | ||
| + | |||
| + | Войдите в оболочку Django, например, | ||
| + | < | ||
| + | source | ||
| + | python manage.py shell | ||
| + | </ | ||
| + | и внутри оболочки | ||
| + | < | ||
| + | from django.core.mail import EmailMessage | ||
| + | from django.conf import settings | ||
| + | |||
| + | settings.EMAIL_BACKEND = ' | ||
| + | |||
| + | email = EmailMessage( | ||
| + | ' | ||
| + | ' | ||
| + | settings.DEFAULT_FROM_EMAIL, | ||
| + | [' | ||
| + | ) | ||
| + | email.send(fail_silently=False) | ||
| + | </ | ||
| + | У вас есть возможность либо получить письмо (в этом случае оно будет отправлено на адрес receiveer@email.com ), либо вы увидите ошибку. Например, | ||
| + | < | ||
| + | SMTPAuthenticationError: | ||
| + | </ | ||
| + | =====16. Часто задаваемые вопросы===== | ||
| + | Видео воспроизводится, | ||
| + | |||
| + | Скорее всего, файл спрайтов был создан неправильно. Вывод функции files.tasks.produce_sprite_from_video() в этом случае будет примерно таким | ||
| + | < | ||
| + | convert-im6.q16: | ||
| + | </ | ||
| + | Решение: | ||
| + | < | ||
| + | <policy domain=" | ||
| + | <policy domain=" | ||
| + | </ | ||
| + | Недавно добавленные видеофайлы теперь смогут создавать файлы спрайтов, | ||
| + | < | ||
| + | root@8433f923ccf5:/ | ||
| + | root@8433f923ccf5:/ | ||
| + | Python 3.8.14 (default, Sep 13 2022, 02:23:58) | ||
| + | </ | ||
| + | и беги | ||
| + | < | ||
| + | In [1]: from files.models import Media | ||
| + | In [2]: from files.tasks import produce_sprite_from_video | ||
| + | |||
| + | In [3]: for media in Media.objects.filter(media_type=' | ||
| + | | ||
| + | </ | ||
| + | это позволит заново создать спрайты для видео, которые не удалось выполнить. | ||
| + | |||
| + | =====17. Код согласия на использование файлов cookie===== | ||
| + | В файле '' | ||
| + | {{: | ||
| + | |||
| + | |||
| + | =====18. Отключить кодирование и показывать только оригинальный файл===== | ||
| + | При загрузке видео они кодируются в несколько разрешений, | ||
| + | < | ||
| + | DO_NOT_TRANSCODE_VIDEO = True | ||
| + | </ | ||
| + | Это отключит процесс перекодирования и будет показан только исходный файл. Обратите внимание, | ||
| + | |||
| + | =====19. Закругленные углы на видео===== | ||
| + | По умолчанию видеоплеер и элементы мультимедиа теперь имеют закругленные углы на больших экранах (не на мобильных устройствах). Если вам не нравится это изменение, | ||
| + | < | ||
| + | frontend/ | ||
| + | frontend/ | ||
| + | frontend/ | ||
| + | </ | ||
| + | Теперь вам придется перезапустить сборку фронтенда, | ||
| + | |||
| + | =====20. Переводы===== | ||
| + | ====20.1 Установить язык по умолчанию==== | ||
| + | По умолчанию MediaCMS доступен на нескольких языках. Чтобы установить язык по умолчанию, | ||
| + | |||
| + | ====20.2 Удалить существующие языки==== | ||
| + | Чтобы ограничить количество языков, | ||
| + | |||
| + | ====20.3 Улучшить существующий перевод==== | ||
| + | Чтобы внести улучшения в существующий переведенный контент на языке, на который уже выполнен перевод, | ||
| + | |||
| + | ====20.4 Добавить больше контента к существующему переводу==== | ||
| + | Не весь текст переведен, | ||
| + | |||
| + | а) вы сделали текст переводимым в коде б) вы добавляете переведенную строку | ||
| + | |||
| + | Для a) вам нужно посмотреть, | ||
| + | |||
| + | - шаблоны Django, которые находятся в templates/ dir. Посмотрите templates/ | ||
| + | - код фронтенда (React), посмотрите, | ||
| + | После того, как строка отмечена как переводимая, | ||
| + | < | ||
| + | python manage.py process_translations | ||
| + | </ | ||
| + | Чтобы заполнить строку на всех языках. НИКАКИЕ PR не будут приняты, | ||
| + | |||
| + | После запуска этой команды переведите строку на нужный вам язык. Если переводимая строка находится в шаблонах Django, вам не нужно перестраивать frontend. Если изменение находится во frontend, вам придется перестроить, | ||
| + | |||
| + | ====20.5 Добавить новый язык и перевести==== | ||
| + | Чтобы добавить новый язык: добавьте язык в settings.py, | ||
| + | |||
| + | =====21. Как изменить видеокадры на видео===== | ||
| + | По умолчанию при просмотре видео вы можете навести курсор и увидеть небольшие изображения, | ||
| + | |||
| + | * отредактируйте ./ | ||
| + | * отредактируйте settings.py и установите то же число для значения SPRITE_NUM_SECS | ||
| + | * теперь вам придется пересобрать фронтенд: | ||
| + | После этого для вновь загруженных видео будут сгенерированы спрайты с новым количеством секунд. | ||
software/nas/nas_ds420_mediacms_dsm_7_admins_docs.1741530144.txt.gz · Последнее изменение: — vladpolskiy
