Столкнулся с неожиданным фактом: UMI CMS очень даже неплохо кастомизируется в плане пользовательского интерфейса административной части системы. Задача стояла очень простая: добавить в админку в модуль Новости кнопку для закачки видео на YouTube и последующей вставки кода этого видео в текстовое поле.
Порывшись в документации, я нашел вот такой забавный пример. В примере подключается пользовательский xsl документ form.modify.custom.xsl, и на его плечи ложится вывод на экран поля Дата публикации из шаблона Новости. Единственное, документация похоже устарела и файл надо создавать не тут ~/styles/skins/full/news/form.modify.custom.xsl, а тут ~/styles/skins/full/data/modules/news/form.modify.custom.xsl, и full соответственно надо заменить на Вашу tpl, у меня это было mac.
Приведу и сам xsl документ
1 2 3 4 5 6 7 8 9 10 11 | <? xml version = "1.0" encoding = "UTF-8" ?> < xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:xlink = "http://www.w3.org/TR/xlink" > < xsl:template match = "field[@type = 'date']" mode = "form-modify" > < div > < label for = "{@name}" >< xsl:value-of select = "@title" /></ label > < input type = "text" name = "{@input_name}" value = "{.}" id = "{@name}" style = "border: red 1px solid;" /> </ div > </ xsl:template > </ xsl:stylesheet > |
Собственно выражение @type = 'date' и отвечает за то, чтобы произошла замена именно на тип date. Причем если в шаблоне данных Новости есть еще поля с типом date, они тоже заменятся. Мне надо было заменить лишь одно конкретное поле с типом text и именем video . Поэтому, не долго думая, я поменял условие на следующие
1 | < xsl:template match = "field[@type = 'text' and @name='video']" mode = "form-modify" > |
Но чуда не случилось, документ попросту не сформировался. Тогда я нашел файл, который по дефолту отвечает за отображение поля с типом text. Этот файл у меня лежит тут ~/styles/skins/mac/form.modify.xsl
За отображение обычного текстового поля в нем отвечает вот этот кусок кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < xsl:template match = "field[@type = 'text']" mode = "form-modify1" > < div style = "width: 100%; height: auto; float: left;" class = "field" > < label for = "{@name}" > < xsl:value-of select = "@title" /> < xsl:if test = "@tip" > < img class = "@tip" src = "/images/cms/admin/full/ico_help.gif" > < xsl:attribute name = "onmouseover" >show_tip(this, '< xsl:value-of select = "@name" />', '< xsl:value-of select = "@title" />', '< xsl:value-of select = "@tip" />') </ xsl:attribute > </ img > </ xsl:if > </ label > < textarea name = "{@input_name}" id = "{@name}" style = "width: 100%; height: 120px;" > < xsl:value-of select = "." /> </ textarea > </ div > </ xsl:template > |
Как мы можем видеть, разница тут в режиме, или по "ихнему" в mode, он, в отличии от поля date, имеет в конце 1. Я добавил этот код в form.modify.custom.xsl и заменил условие подмены на field[@type = 'text' and @name='video']
Теперь осталось лишь слегка модифицировать этот код, добавив кнопку, которая открывает в отдельном окне закачку на youtube
Окончательное содержание файла form.modify.custom.xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <? xml version = "1.0" encoding = "UTF-8" ? <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:xlink = "http://www.w3.org/TR/xlink" > < xsl:template match = "field[@name = 'video']" mode = "form-modify1" > < div style = "width: 100%; height: auto; float: left;" class = "field" > < label for = "{@name}" > < xsl:value-of select = "@title" /> < xsl:if test = "@tip" > < img class = "@tip" src = "/images/cms/admin/full/ico_help.gif" > < xsl:attribute name = "onmouseover" > show_tip(this,'< xsl:value-of select = "@name" />', '< xsl:value-of select = "@title" />', '< xsl:value-of select = "@tip" />') </ xsl:attribute > </ img > </ xsl:if > </ label > < textarea name = "{@input_name}" id = "{@name}" style = "width: 100%; height: 120px;" > < xsl:value-of select = "." /> </ textarea > < input type = "button" value = "Закачать видео" onclick=" window.videoid = '{@name}' ; window.open('youtube.php','YouTube Downloader', ' left = 200 , width = 720 , height = 400 ')"/> </ div > </ xsl:template > </ xsl:stylesheet > |
Таким образом можно модифицировать любые поля и типы.Как закачивать видео на YouTube с одной кнопки напишу в следующей статье ;)
Комментарии