CMS-словарик: расширения для CMS. Cms расширение


Расширение файла CMS - Как открыть файл CMS?

Если вы попали на этот сайт, то, скорее всего, у вас не получается открыть файл .cms. Полное название файла: Content Management System. Если после двойного клика на иконке файла появилось сообщение, что необходимо установить дополнительные программы, чтобы открыть файл, то внизу страницы вы найдете список программ, которые, скорее всего, подойдут для этой цели.

Расширение файла .cms (Content Management System)

категория Создатель/производитель Описание файла Популярность
Интернет-файлы N/A Content Management System
Программы, использующие это расширение: .cms ADS Операционная система программное обеспечение
Windows
  • View in a Web browser
  • Edit with a CMS application
MAC
  • View in a Web browser
  • Edit with a CMS application

Расширение файла .cms (Connection Manager Service Profile)

категория Создатель/производитель Описание файла Популярность
Файлы данных Microsoft Connection Manager Service Profile
Программы, использующие это расширение: .cms Операционная система программное обеспечение
Windows
  • Microsoft Connection Manager Administration Kit
Расширение .cms могут использовать и другие программы, кроме вышеуказанных. Если вы знаете что-нибудь о файлах .cms, что могло бы быть полезным другим посетителям сайта HowOpen.org, сообщите нам, пожалуйста, и мы постараемся обновить нашу базу.

При посещении нашего сайта вы наверняка задавали себе один из нижеперечисленных вопросов:

Надеемся, что мы смогли предоставить вам исчерпывающую информацию об этом типе файла. В противном случае можно попробовать поискать информацию о расширении .cms на сайте Wikipedia.org.

www.howopen.org

File Extension CMS (Файловое расширение CMS)

Файловое расширения CMS (file extension CMS) используется операционными системами для распознавания файлов с содержимым типа CMS. Ниже мы предоставим информацию которая поможет вам разобраться в этом типе файлов.

Чтобы узнать есть ли у вас приложение которое поддерживает файловое расширение CMS (file extension CMS) вам необходимо два раза щелкнуть мышкой на имени файла. После этого операционная система Windows либо откроет этот файл с соотвествующим приложением, либо предложит вам поискать подходящее приложение на диске или в интернете. Если у вас нет необходимого приложения на вашем компьютере то вам необходимо поискать в интернете приложения которые могут открывать файлы с расширением CMS (file extension CMS).

Файловые расширения помогают компьютерам найти правильное приложение для открываемых файлов. Операционные системы обычно не смотрят на содержание открываемых файлов. Вместо этого они немедленно анализируют расширение файла и на основе него пробуют найти необходимое для открытия приложение. Такой подход позволяет быстро открывать файлы. Большинство операционных систем требуют использование файловых расширений.

Файловые расширения являются очень полезной вещью. Просто взглянув на название файла мы можем определить тип информации который сохранен в этом файле и какое приложение может быть использованно для этого. Замечали ли вы что когда компьютер не знает как открыть файл он спрашивает вас о том чтобы вы выбрали программу для открытия или предлагает поискать в интернете? Да! Таким образов файловые расширения облегчают работу на компьютере. Если вдруг отсутствует программа для открытия файла, то компьютер немедленно спросит пользователя с выбором нужной программы.

Если вы знаете какие приложение могут окрыть файлы с файловым расширением CMS (file extension CMS) и это не упомянуто на нашем сайте, пожалуйста пишите нам в нашей контактной форме.

Для более подробной информации о файлах CMS и другой полезной информации, читайте другие статьи на нашем сайте.

Наполнение этого сайта информацией и его поддержка это непрерывный и никогда не заканчивающийся процесс. Мы всегда рады услышать вопросы и отзывы которые могут быть посланы нам на странице контакта. Тем не менее так как количество посетителей данного сайта весьма велико мы не всегда можем лично ответить на каждый запрос. Спасибо за понимание!

cms.extensionfile.net

Расширение файла CMS - Как открыть файл CMS?

Если вы попали на этот сайт, то, скорее всего, у вас не получается открыть файл .cms. Полное название файла: Connection Manager Service Profile. Если после двойного клика на иконке файла появилось сообщение, что необходимо установить дополнительные программы, чтобы открыть файл, то внизу страницы вы найдете список программ, которые, скорее всего, подойдут для этой цели.Создатель этого формата — Microsoft.

Расширение файла .cms (Connection Manager Service Profile)

категория Создатель/производитель Описание файла Популярность
Файлы данных Microsoft Connection Manager Service Profile
Программы, использующие это расширение: .cms ADS Операционная система программное обеспечение
Windows
  • Microsoft Connection Manager Administration Kit

Расширение файла .cms (Content Management System)

категория Создатель/производитель Описание файла Популярность
Интернет-файлы N/A Content Management System
Программы, использующие это расширение: .cms Операционная система программное обеспечение
Windows
  • View in a Web browser
  • Edit with a CMS application
MAC
  • View in a Web browser
  • Edit with a CMS application
Расширение .cms могут использовать и другие программы, кроме вышеуказанных. Если вы знаете что-нибудь о файлах .cms, что могло бы быть полезным другим посетителям сайта HowOpen.org, сообщите нам, пожалуйста, и мы постараемся обновить нашу базу.

При посещении нашего сайта вы наверняка задавали себе один из нижеперечисленных вопросов:

Надеемся, что мы смогли предоставить вам исчерпывающую информацию об этом типе файла. В противном случае можно попробовать поискать информацию о расширении .cms на сайте Wikipedia.org.

www.howopen.org

расширения для CMS / Хабр

Как показывает независимое исследование, около 67 процентов Web-разработчиков на Хабрахабре пишут свои CMS. За свою жизнь ваш покорный слуга написал около пяти-шести CMS-велосипедов, и в процессе работы была с жадностью перерыта масса информации о структуре и принципах работы других CMS, а также придумано несколько своих. Мир CMS полон разнообразных модулей, расширений, компонентов, компонент, плагинов. О том, как разработчики CMS позволяют расширять функционал, и какие термины для этого используются, я и хочу рассказать. Сразу предупреждаю, что нижеследующая информация может и запутать, поэтому термины, которые в контексте разных CMS имеют разные значения, несут в скобках номер, указывающий на то или иное значение. Некоторые принципы, изложенные здесь, могут заставить сморщиться кого-либо. В списке, в основном, перечислен функционал, расширяющий систему. Синтаксис, используемый в примерах, в большинстве случаев выдуман. Надеюсь, список поможет с организацией принципов работы собственных CMS, подкинет идею или просто заинтересует. Те, кому скучно, могут попробовать угадать, какая именно CMS имелась в виду в каждом конкретном случае (дабы избежать холивара, названия CMS в самом списке не используются, да и в конкретных случах термины могут содержать несколько иное значение).Модуль(1) — блок с заголовком — фрагмент, вставляемый в определённое место страницы, в левый блок, правый блок, в центральную часть или на главную страницу. Как правило, все модули имеют схожий внешний вид, определяемый макетом(1). Содержимое определяется администратором (например, кто сейчас на сайте, или последняя фотография в галерее).Компонент(1) — одна или несколько страниц, например, фотогалерея или интернет-магазин. Модуль(1) при этом может принадлежать компоненту(1). Каждая страница принадлежит только одному компоненту. Компонент забирает себе центральную область размеченного макета(1).Расширение(1) — функционал, отсутствующий в ядре системы, добавляющий новые низкоуровневые возможности, используемы программистом (новый способ обрезки изображений, функционал для создания бэкапов, новый тип данных и так далее).Тег(1) — конструкция вида {block}, #BODY#, {TITLE}, которая будет заменена на результат работы кода или содержимое файла. Как правило, определяется список разрешённых тегов, и список данных или скриптов, которые будут вставлены вместо тегов. Также иногда играют роль областей для разметки макетов(1). В некоторых случаях используется для вставки самостоятельных фрагментов кода или данных (например, заголовок страницы или вставки кода для вывода кода биржи обмена ссылками). Часто наличие таких тегов объясняется желанием отделить шаблоны от логики. Также часто для создания нового тега в некоем index.php создаётся новый элемент массива, по которому производится обычный str_replace().Макет(1) — файл, содержащий разметку HTML-кода часто просто имеет размеченные области, в которые вставляются модули (1) или компоненты(1). В отличие от шаблона(1), содержит только вёрстку всей страницы. Может состоять из двух файлов (header и footer).Шаблон(1) — фрагмент страницы, содержащий HTML код и спецсимволы для вставки результатов работы кода. Например, шаблон страницы каталога содержит вёрстку каталога без вёрстки внешнего вида всей страницы. В некоторых системах шаблоны могут быть собраны на основе других шаблонов.Редактируемая область(1), Файл(1) — в некоем файле с вёрсткой указывается место, в это место вставляется содержимое файлов, в том числе php-файлов с кодом. В некоторых случаях такие файлы создаются автоматически при создании страницы. Часто в таких файлах хранится только контент. Иногда до и после этого файла вставляются шапка и подвал сайта.Редактируемая область(2) как правило, в макете указывается несколько областей, далее система администрирования определяет, что именно вывести в то или иное место.Сниппет(1), или Модуль(2) — функция, совершающая действие и возвращающая результат. Для быстрого вызова вставляется в шаблон (например, {%print_comments%})Сниппет(2) — готовый маленький фрагмент вёрстки, администратор на его основе получает HTML код для вставки на страницу (например, кнопки Скачать и Демо в обзорных блогах).Чанк(1), или Шаблон(2) — именованный фрагмент готового HTML кода (например, {{header}} или {{footer}})Фильтр(1) — короткая конструкция, например, {ФОТО=Название фотографии}, вставляется в текстовое содержимое страницы администратором, при показе будет заменено на результат работы кода.Фильтр(2) — правило для замены одного фрагмента на другой, в том числе с использованием регулярного выражения (например, '/(.*)/'=>'Заголовок страницы'), используются для упрощённой вставки данных в шаблон без перевёрстки или правки последнего.Мамбот(1) — некий код, который меняет HTML — код после его генерации.Приложение(1) — некий код, который виден в администраторской панели, и который способен влиять на содержимое базы данных или, например, проводить сервисное обслуживание (бекапы),Плагин(1) — код, расширяющий функционал для того, чтобы система смогла использовать новый тип данных в дополнение к существующим, например, ссылку Youtube или поддержку postgree базы данных вместо Mysql.Плагин(2) — мини-приложение, выводящееся в какой-либо части сайта, и являющееся независимым (например, голосование, репост твиттера или часы)Скрипт(1) — файл, расположенный в папке с системой, который могут запускать некие фрагменты сайта. Используется для быстрой вставки новых возможностей низкоуровневыми методами при доработке сайта программистами, обслуживающими сайт. Как правило, представляет из себя независимый php-код. Может быть заменён на Тег(1), или вставлен другим способом.Шаблон(3) — папка, содержащая размеченный на блоки макет страницы, изображения, css-файлы шаблона, иногда превью. В специализированных CMS позволяет полностью менять внешний вид сайта.Загрузчик(1) — отдельный независимый скрипт, который выполняет роль посредника либо выполняющий второстепенные функции (например, каптча, Ajax загрузчик либо всплывающий баннер).Класс(1) — папка с описанием класса, содержащего методы, выводящие данные. Используется в шаблонах — {% search do_search%}Хук(1) — функция, вызываемая вместо некоей другой функции либо шаблон, вызываемый вместо другого шаблона, переопределяет оригинальный функционал при попытке его использовать.Хук(2), Триггер(1) — функция, вызываемая сразу после некоей другой определённой функции или после запроса определённого шаблона. Может использоваться для записи логов, или для отправки электронной почты.Правило(1) — строка в INI-файле или ином месте, задающая маску для URL и ссылку на код, каким-либо образом её обрабатывающий. Например, '/catalog/add' -> addme.phpФункция(1) — тоже самое, что и Класс(1), только является независимой функцией.Фрагмент(1) — часть шаблона с HTML-вёрсткой (например, форма или рамочка), может использоваться в нескольких местах.Админка(1) — полноценное расширение для CMS, предоставляющее альтернативный интерфейс для управления данными. В случае CMF — интерфейс для управления данными, который может вообще отсутствовать в оригинальном коде CMF. В случае с CMS — альтернативный backend для управления системой.Компонент(2), Модуль(3) — код, имеющий шаблон, визуально вставляемый (в виде иконки или изображения) в страницу при редактировании в WYSIWYG редакторе. Может быть списком статей, статьёй, формой для отправки сообщения, галереей и так далее.База данных(1) — дополнительные данные в виде CSV-файла, либо другом виде, расширяющая используемые данные (списки городов, курсы валют, базы адресов, курьерские службы и так далее)Загрузчик(1), Расширение(2) — функция либо файл с кодом, выполняемый до обработки страницы, выполняет рутинные действия (запись в лог), переопределяет URL либо объявляет функцию.Скин(1) — папка с изображениями, меняющая внешний вид системы администрирования.Скин(2) — шаблон для сайта, меняющий внешний вид только визуально (цвета, фон), но не способный поменять местами некие блоки, либо изменить функционал. В отличие от шаблона не содержит данных от расположении блоков на каждой странице, в отличие от макета, не содержит HTML вёрстку.Расширение(3) — некие javascript или php файлы, разработанные третьими лицами, которые абсолютно не меняют внешний вид или функционал сайта, но могут быть использованы разработчиками (например, библиотека и плагины jQuery, классы для отправки электронных писем, и так далее). Как правило, лежат в папке, названной external или подобной, в отличие от папки internal, в которой лежат расширения(4) (модули, компоненты), созданные разработчиками CMS и являющиеся частью системы.Расширение(4) — модуль, компонент, плагин — как собирательный термин.Фреймворк(1) — некое гибкое решение на базе CMS, имеющее свою систему управления или своё API, позволяющее гибко добавлять функционал. Может иметь свои расширения(4). Например, существует фреймворк для гибкого управления шаблоном, меню сайта, внешним видом и Javascript-красивостями.Плагин(3) — дополнение к TinyMCE (WYSIWYG — редактор), добавляющее новую кнопочку.API(1) — дополнительный функционал, позволяющий использовать данные сайта внешними сайтами или приложениями.API(2) — классы или функции, упрощающие (усложняющие) жизнь разработчику (например, дополнительное, альтернативное API для работы с базой данных).Модуль(4), Патч(1) — данные для модификации оригинального кода системы. Содержит номера строк, которые должны быть модифицированы, а также файлы, которые надо добавить дополнительно к остальным. Часто существуют Модули(4), которые позволяют подключать остальные Модули(4) в ручном режиме при помощи интерфейса. Теоретически могут преобразить функционал системы до неузнаваемости.Инструмент(1) — скрипт, используемый администратором (например, для смены прав на запись в папку или выводом данных phpinfo().Менеджер(1) — независимый блок скриптом для дополнительно управления, например, менеджер файлов, менеджер изображений, менеджер базы данных. Иногда может работать и без основной системы и разрабатывается третьими лицами.Обёртка(1) — расширение(4), позволяющее встраивать сайт внутрь другой cms, (например, форум внутри wiki или wiki внутри блога).Модуль(5) — расширение(4) для системы, добавляющее абсолютно новый функционал, не трогая существующий. Например, добавляющее функционал форума в wiki-движок, блогов в форумный, функционал интернет-магазина в сайт-визитку и так далее. Часто продаётся по-отдельности.

habr.com

Расширения для CMS

Рейтинг статей



Вход / Регистрация

Регистрация [?]: Регистрация у нас позволит:
  • Покупать платные продукты из каталога и иметь к ним доступ в любое время
  • Задавать вопросы другим людям, участвовать в дискуссиях
  • Публиковать свои расширения, программы и софт, если Вы разработчик или дистрибьютор
  • Добавлять интересные ссылки и иметь к ним доступ из любой точки, где есть выход в Интернет
  • Следить за обновлениями сервиса и получать дополнительные возможности, которых не имеют обычные гости
  • Следить за новыми статьями и получать новые знания

Каталог продуктов

Выберите интересующую категорию продуктов:

Сортировать по: дата добавления - по убываниюдата добавления - по возрастаниюалфавит - по возрастаниюалфавит - по убываниюПрименить

Доступные продукты:

Allineed.Ru представляет модуль ColorMenu для Вашего сайта под управлением Joomla 2.5. Модуль позволяет добавить выпадающие меню для любых типов меню Вашего Joomla-сайта. 

Версия: 2.5.0

Просмотров: 8567

Добавлен: 14.07.2013

Тип продукта: Платный

Добавил:  Damascus

Обновлен: 12.09.2013

Категория: Расширения для Joomla 2.5

Этот модуль для Joomla1.5 отображает кнопки со ссылками на Ваши социальные страницы Twitter, Google+ и ленты RSS.

Версия: 1.5.0

Просмотров: 8193

Добавлен: 20.03.2013

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 23.12.2013

Категория: Расширения для Joomla 1.5

Новая версия SuperVote для Joomla. Теперь SuperVote представлен в виде связки компонет + плагин. Это предварительная версия для ознакомления, приветствуютая пожелания и комментарии. В скором будущем возможен апдейт, поэтому Ваше мнение о данном продукте очень ценно для нас.

Версия: 1.5.2

Просмотров: 13047

Добавлен: 01.03.2013

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 23.12.2013

Категория: Расширения для Joomla 1.5

Плагин JRichArticles заключает в себе идею гибкого управления содержимым Ваших статей и более наглядного их представления для читателя. Каждая опция, доступная в вызове плагина по сути представляет собой связанный CSS-стиль, применяемый к блоку текста. Комбинация опций - это комбинация CSS-стилей. За счёт этого тексту статьи можно придавать приятный и презентабельный вид, гибко настраиваемый опциями вызова плагина.

Версия: 1.4.1

Просмотров: 4757

Добавлен: 15.01.2013

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 12.02.2013

Категория: Расширения для Joomla 2.5

Плагин JRichArticles позволяет использовать различные элементы  в тексте статей Вашего сайта на Joomla 2.5. К таким элементам относятся: информационные сообщения (ошибка, предупреждение, совет), сворачиваемые (скрытые) области текста, заголовки, форматированный код и другие.

Версия: 1.6.0

Просмотров: 10273

Добавлен: 12.01.2013

Тип продукта: Платный

Добавил:  Damascus

Обновлен: 23.12.2013

Категория: Расширения для Joomla 2.5

Плагин Browser Support для Joomla 2.5.x - это решение, которое позволяет с легкостью встраивать в материалы и статьи информацию о поддержке популярными браузерами различных особенностей (например свойств и стилей CSS, различий в JavaScript и т.д.). Будет полезен тем веб-мастерам, которые хотят на своем сайте проводить анализ различий между браузерами.

Версия: 1.0.2

Просмотров: 15759

Добавлен: 13.09.2012

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 23.12.2013

Категория: Расширения для Joomla 2.5

Плагин для Joomla 1.5, который добавляет к статье панель со ссылками для скачивания файлов.

Версия: 1.1

Просмотров: 9047

Добавлен: 09.07.2012

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 23.12.2013

Категория: Расширения для Joomla 1.5

YaShare - плагин, позволяющий добавить на Ваш сайт Joomla сервис "Поделиться" от Яндекса для социальных сетей. К статье добавляется панель ссылок, которая позволяет быстро публиковать ссылки на статью в различных сервисах (Я.ру, МойМир, Одноклассники, ВКонтакте, Twitter и др.)

Версия: 1.1

Просмотров: 9504

Добавлен: 09.07.2012

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 23.12.2013

Категория: Расширения для Joomla 1.5

SuperVote - плагин для Joomla, который добавляет голосование для статей сайта. Pаботает на AJAX, позволяет пользователям видеть средний рейтинг статьи. Также поддерживаетдве специальные иконки - [i][b]hot[/b][/i] ([i][b]горячее[/b][/i]) и [i][b]popular[/b][/i] ([i][b]популярное[/b][/i]), с настраиваемыми текстом и параметрами. Благодаря этим иконкам пользователи будут видеть, какие статьи наиболее востребованы

Версия: 1.0.2

Просмотров: 9652

Добавлен: 09.07.2012

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 15.03.2013

Категория: Расширения для Joomla 1.5

Плагин уведомляет администратора, когда кто-то заходит в backend и frontend Вашего сайта. Имеет возможность рассылки писем на несколько E-mail адресов.

Просмотров: 17036

Добавлен: 06.07.2012

Тип продукта: Бесплатный

Добавил:  Damascus

Обновлен: 19.12.2013

Категория: Расширения для Joomla

Последние продукты



Нашли ошибку?

Статистика сайта

Мы в Интернете



allineed.ru

Расширение страниц - заголовки моделей

15 May 2014 г. 17:25:35

Новое в версии 3.0

Вы можете расширить страницу и заголовки моделей при помощи своих собственных полей (Например добавить картинку на каждую страницу) используя модели расширения cms.extensions.PageExtension и cms.extensions.TitleExtension соответственно

~cut~

Руководство

Привязывание расширений в панели администратора

Добавление элемента Toolbar Menu при расширении страницы

Использование расширений и меню

Использование расширений в шаблонах

Обработка отношений

Руководство

Для добавления полей в модель страницы, надо создать класс который наследуется от cms.extensions.PageExtension. Убедитесь что модель cms.extensions.PageExtension импортирована. Ваш класс должен находится в файле models.py в виде приложения или модуля. Так как PageExtension (и TitleExtension) наследуются из django.db.models.Model, вы можете свободно добавлять любые поля, которые захотите, но убедитесь что не используете никакие уникальные ограничения во всех полях. Потому что уникальность препятствует корректной работе механизма копирования расширений. Это зачит что вы не можете использовать отношения один к одному в модели расшенерия. Наконец вам надо зарегистрировать модель при помощи extension_pool.

Вот небольшой пример который добавляет поле icon на страницу.

from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class IconExtension(PageExtension): image = models.ImageField(upload_to='icons') extension_pool.register(IconExtension)

Привязывание расширений в панели администратора

Чтобы сделать Ваше расширение редактируемым, вы должны сначала создать класс admin, наследуя его от cms.extensions.PageExtensionAdmin. Этот класс обрабатывает права доступа к страницам. Если вы хотите использовать собственный класс admin, убедитесь что исключили текущую версию расширения используя в запросе filter(extended_page__publisher_is_draft=True)ю

Продолжая пример модели выше, создадим соответствующий простой класс PageExtensionAdmin класс: from django.contrib import admin from cms.extensions import PageExtensionAdmin

from .models import IconExtension class IconExtensionAdmin(PageExtensionAdmin): pass admin.site.register(IconExtension, IconExtensionAdmin)

Так как PageExtensionAdmin наследуется от ModelAdmin, Вы можете использовать обычный набора свойств Django из модели ModelAdmin, в зависимости от ваших нужд.

После регистрации класса admin, модель появится на верхнему уровне в списке панели администратора.

Стоит заметить что поле, которое связывает отношение между расширением и CMSPage не редактируемое, поэтому оно не появится в панели администратора. К сожалению это оставляет оператор без связывания как такового, пр расширении конкретной страницы. Способом решения данной проблемы является использование CMSToolbar.

Вы так-же можете захотеть сделать вашу модель редактируемой из панели инструментов cms, чтобы связать каждый экземпляр расширения модели со страницей. (По умолчанию страница в панели администратора является не редактируемым атрибутом). Код из примера ниже должен находиться cms_toolbar.py, в одном из ваших приложений и добавляет меню для расширение на каждую страницу:

from cms.api import get_page_draft from cms.toolbar_pool import toolbar_pool from cms.toolbar_base import CMSToolbar from cms.utils import get_cms_setting from cms.utils.permissions import has_page_change_permission from django.core.urlresolvers import reverse, NoReverseMatch from django.utils.translation import ugettext_lazy as _ from .models import IconExtension @toolbar_pool.register class IconExtensionToolbar(CMSToolbar): def populate(self): # always use draft if we have a page self.page = get_page_draft(self.request.current_page) if not self.page: # Nothing to do return # check global permissions if CMS_PERMISSIONS is active if get_cms_setting('PERMISSION'): has_global_current_page_change_permission = has_page_change_permission(self.request) else: has_global_current_page_change_permission = False # check if user has page edit permission can_change = self.request.current_page and self.request.current_page.has_change_permission(self.request) if has_global_current_page_change_permission or can_change: try: icon_extension = IconExtension.objects.get(extended_object_id=self.page.id) except IconExtension.DoesNotExist: icon_extension = None try: if icon_extension: url = reverse('admin:myapp_iconextension_change', args=(icon_extension.pk,)) else: url = reverse('admin:myapp_iconextension_add') + '?extended_object=%s' % self.page.pk except NoReverseMatch: # not in urls pass else: not_edit_mode = not self.toolbar.edit_mode current_page_menu = self.toolbar.get_or_create_menu('page') current_page_menu.add_modal_item(_('Page Icon'), url=url, disabled=not_edit_mode)

Теперь, при вызове оператора “Edit this page” из панели инструментов, там будет дополнительный элемент меню (в нашем случае Page Icon), который будет использован для открытия диалога, где оператор может изменить поле icon

Обратите внимание, когда расширение сохранено, страница будет отмечена что у нее есть неопубликованные изменения. Чтобы увидеть изменения необходимо опубликовать страницу.

Использование расширений и меню

Если вы хотите расширить возможности отображаемого меню (например, если вы создали расширение которое добавляет изображение на страницу) используйте свойства меню. Каждое свойство node.id соответствует связанному page.id. Чтобы получить объект страницы можно воспользоваться Page.objects.get(pk=node.id). Каждое расширение страницы имеет отношение один-к-одному со страницей, к которой у вас есть доступ при помощи обратного отношения, например: extension = page.yourextensionlowercased. Теперь вы можете связать расширение сохраняя его в узле node.extension = extension. У вас есть доступ к изображению в шаблоне меню из дочернего объекта child.extension.icon.

Использование расширений в шаблонах

Чтобы получить доступ к расширению из шаблона вы можете просто воспользоваться соответствующим полем related_name которое теперь доступно в объекте Page.

Как и в обычном механизме имен в Django, соответствующее поле имеет такое-же название как и PageExtension, в нижнем регистре. Таким образом, модель вашего расширения называется IconExtension, и из оно страницы будет доступно через *page.iconextension, поэтому вы можете использовать что-то вроде:

{% load staticfiles %} {# rest of template omitted ... #} {% if request.current_page.iconextension %} <img src="{% static request.current_page.iconextension.url %}"> {% endif %}

Где для получения доступа к текущей странице, из которой был вызван шаблон, получаем через request.current_page

Важно помнить что пока оператор используемый на странице не связан со всеми страницами, у страницы может не быть доступа к отношению iconexension, используемого в блоке {% if ... %}...{% endif %} выше.

Обработка отношений

Если ваше расширение PageExtension или TitleExtension использует внешний ключ из другой модели или использует отношение многий-ко-многим через поле ManyToMan, то вы также должны переопределить метод copy_relations(self, oldinstance, language), чтобы поля были скопированы соответствующим образом, когда CMS выполняет копирование вашего расширения при поддержке версионности и т.д.

from django.db import models from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool class MyPageExtension(PageExtension): page_categories = models.ManyToMany('categories.Category', blank=True, null=True) def copy_relations(self, oldinstance, language): for page_category in oldinstance.page_categories.all(): page_category.pk = None page_category.mypageextension = self page_category.save() extension_pool.register(MyPageExtension)

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

cultofdigits.com

Django CMS - Пример расширения CMS

12 April 2014 г. 15:46:53

В этом разделе предполагается что вы уже о ознакомились с руководством по Django и будет показано как интегрировать программу голосования, из руководства, в django CMS. Если в дальнейшем будет упоминаться голосование, то это будет ссылка на руководство по Django. Так же убедитесь что приложение голосования добавлено в секцию INSTALLED_APPS.

~cut~

1.1 Мой первый плагин

1.1.1 Модель

1.1.2 Класс Plugin

1.1.3 Шаблоны

1.2 Мое первое приложение (связывание приложений)

1.3 Мое первое меню

Таким образом ваш файл urls.py будет приблизительно выглядеть так:

from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), (r'^polls/', include('polls.urls')), (r'^', include('cms.urls')), )

1.1 Мой первый плагин

Плагин это небольшая часть контента, которая помещается на вашу страницу

1.1.1 Модель

Для вашего приложения голосования мы хотим создать небольшой плагин, которые показывает голосование и позволяет пользователям голосовать.

В приложении голосования models.py будет выглядеть так:

from cms.models import CMSPlugin class PollPlugin(CMSPlugin): poll = models.ForeignKey('polls.Poll', related_name='plugins') def __unicode__(self): return self.poll.question

Замечание

В django CMS все плагины вместо models.Model должны наследоваться от cms.models.CMSPlugin

Выполните manage.py syncdb для создания таблиц в базе данных для этой модели. Больше информации можно найти в статье http://cultofdigits.com/articles/django-cms/2-ispolzovanie-south-v-django-cms/

1.1.2 Класс Plugin

Теперь создайте файл cms_plugins.py в той же директории в которой находится models.py. После всех Ваших изменений директорий должен выглядеть следующим образом:

polls/ __init__.py cms_plugins.py models.py tests.py views.py

Класс plugin отвечает за предоставление информации для django CMS, когда необходимо получить информацию для отрисовки вашего плагина.

Для плагина голосования класс plugin должен выглядеть следующим образом:

from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from polls.models import PollPlugin as PollPluginModel from django.utils.translation import ugettext as _ class PollPlugin(CMSPluginBase): model = PollPluginModel # Model where data about this plugin is saved name = _("Poll Plugin") # Name of the plugin render_template = "polls/plugin.html" # template to render the plugin with def render(self, context, instance, placeholder): context.update({'instance':instance}) return context plugin_pool.register_plugin(PollPlugin) # register the plugin

Замечание

Все классы которые создают плагины должны наследоваться от cms.plugin_base.CMSPluginBase и так-же должны быть зарегистрированы при помощи cms.plugin_pool.plugin_pool.

1.1.3 Шаблоны

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

Шаблон должен выглядеть приблизительно так:

<h2>{{ instance.poll.question }}</h2> <form action="{% url polls.views.vote instance.poll.id %}" method="post"> {% csrf_token %} {% for choice in instance.poll.choice_set.all %} <input type="radio" name="choice" value="{{ choice.id }}" /> <label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br /> {% endfor %} <input type="submit" value="Vote" /> </form>

Замечание

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

1.2 Мое первое приложение (связывание приложений)

Прямо сейчас внешние приложение связывается статически в файле urls.py. В django CMS это не является желательным методом. Идеальный способ это связывание приложения на ваших страницах внутри CMS.

Для этого необходимо создать CMSApp. Это всего лишь небольшой класс который сообщает как приложение должно быть включено в CMS.

Приложения находится в файле под названием cms_app.py, поэтому давайте создадим внутри приложения голосования файл приложения:

polls/ __init__.py cms_app.py cms_plugins.py models.py tests.py views.py

Внутри этого файла поместите следующее:

from cms.app_base import CMSApp from cms.apphook_pool import apphook_pool from django.utils.translation import ugettext_lazy as _ class PollsApp(CMSApp): name = _("Poll App") # give your app a name, this is required urls = ["polls.urls"] # link your app to url configuration(s) apphook_pool.register(PollsApp) # register your app

Теперь можно удалить из файла urls.py ссылку на приложение голосования, и он будет выглядеть следующим образом

from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), (r'^', include('cms.urls')), )

Теперь откройте панель администратора и вашем браузере и отредактируйте страницу. Откройте вкладку ‘Advanced Settings и выберите для вашего приложения Polls App.

К сожалению для того чтобы эти изменения вступили в силу Вам придется перезагрузить сервер. Сделайте это и после этого перейдите на страницу и вы уведете ваше приложение для голосования.

1.3 Мое первое меню

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

Для этого нам надо создать файл menu.py. Создайте его и убедитесь что ваше приложения голосования выглядит следующим образом:

polls/ __init__.py cms_app.py cms_plugins.py menu.py models.py tests.py views.py

В файле menu.py добавьте следующее содержание:

from cms.menu_bases import CMSAttachMenu from menus.base import Menu, NavigationNode from menus.menu_pool import menu_pool from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ from polls.models import Poll class PollsMenu(CMSAttachMenu): name = _("Polls Menu") # give the menu a name, this is required. def get_nodes(self, request): """ This method is used to build the menu tree. """ nodes = [] for poll in Poll.objects.all(): # the menu tree consists of NavigationNode instances # Each NavigationNode takes a label as its first argument, a URL as # its second argument and a (for this tree) unique id as its third # argument. node = NavigationNode( poll.question, reverse('polls.views.detail', args=(poll.pk,)), poll.pk ) nodes.append(node) return nodes menu_pool.register_menu(PollsMenu) # register the menu.

На данном этапе это меню не делает много. Мы должны в первую очередь связать его с нашим приложениям.

Поэтому откройте файл cms_apps.py и добавьте стелющее:

from cms.app_base import CMSApp from cms.apphook_pool import apphook_pool from polls.menu import PollsMenu from django.utils.translation import ugettext_lazy as _ class PollsApp(CMSApp): name = _("Poll App") urls = ["polls.urls"] menus = [PollsMenu] # attach a CMSAttachMenu to this apphook. apphook_pool.register(PollsApp)

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

cultofdigits.com


Prostoy-Site | Все права защищены © 2018 | Карта сайта