[videoGallery] Добавляем видеоролики из фронтенда



Многие задавали вопрос: "можно ли добавлять видео из фронта и как это реализовать". Из-за особенности компонента самому это сделать было не так просто, как казалось на первый взгляд. Сегодня Алексей заказал внедрение данной функции.

В компонент был добавлен сниппет videoGallery.input, который можно вызвать в любой форме на сайте, примерно так:
[[!videoGallery.input?
	&tv=`video`
	&res=`[[+id]]`
]]
&tv — это имя ТВ,
&res — ID ресурса, к которому привязано видео.


Например, можно добавить возможность указания видео на Youtube при создании/обновлении тикета компонента Tickets. Для этого сделаем следующее:

Предполагается, что у Вас уже есть ТВ video с типом videoGallery.

1) Добавим в чанк tpl.Tickets.form.create внутрь тега form такой код:
[[!videoGallery.input?
	&tv=`video`
	&res=`0`
]]

2) В чанк tpl.Tickets.form.update:
[[!videoGallery.input?
	&tv=`video`
	&res=`[[+id]]`
]]

3) Ну и форму TicketForm вызовем, к примеру на странице:
[[!TicketForm?
	&allowedFields=`parent,pagetitle,content,video`
	&bypassFields=`video`
]]
параметр &bypassFields указать обязательно!

Внимание. Компонент заточен только под ресурсы. С другими объектами скорей всего возникнут проблемы.

Скачать можно на modStore.pro
Павел Гвоздь
16 октября 2015, 20:21
modx.pro
7
3 986
+9
Поблагодарить автора Отправить деньги

Комментарии: 39

Дмитрий Середюк
17 октября 2015, 00:16
0
Отлично так держать!
    Jenya Filimonov
    17 октября 2015, 16:54
    -2

    Что то в тикет не публикуется.
    Павел Гвоздь
    17 октября 2015, 17:56
    0
    … удалено… не туда...
      Jenya Filimonov
      17 октября 2015, 21:04
      -4
      Может кто сталкивался и есть идеи более содержательные чем у Гвоздь?: )
        Павел Гвоздь
        17 октября 2015, 21:17
        +3
        Может сталкивался… может есть…

        Подробности не мешало бы, чтобы ответ на вопрос получить. Мои экстрасенсорные способности слишком много энергии потребляют, чтобы каждый раз их включать…
          Jenya Filimonov
          17 октября 2015, 21:39
          0
          Сделал все как тут описано. TV не забыл создать. При добавлении ссылки в строку, в форме создания тикета — превью картинкой и видео появляются. Но в самом тикете ни то ни другое не появляется. Я что то где то забыл вероятно как обычно, но проверил несколько раз и теряюсь в догадках уже.
            Павел Гвоздь
            17 октября 2015, 21:50
            0
            Напиши в личку: логин, пароль, урл бекенда. Посмотрю позже.
              Павел Гвоздь
              18 октября 2015, 00:25
              +2
              У тебя с какого-то счастья вообще тот ТВ не работал. Я не понял, в связи с чем это связано было. Просто удалил его и создал этот же ТВ. У него теперь только ID другой. Всё работает…

              P.S.: Он даже на вкладке дополнительных полей не отображался в бекенде в ресурсе… Никогда не сталкивался с таким при разработке. Могу точно сказать, что проблема не в компоненте была.
                Jenya Filimonov
                18 октября 2015, 10:30
                0
                А я умею там где все просто, найти какие то сложности на пустом месте. Говорят — талант не пропьешь, так вот этот я хотел бы пропить… Спасибо.
                  Jenya Filimonov
                  18 октября 2015, 11:52
                  0
                  Хм зарегистрировал API Key и словил постоянную Video Id not valid. при вводе ссылке на ютуб видео в строку.
                  [2015-10-18 11:51:08] (ERROR @ /home/s1797/www/core/components/videogallery/lib/Panorama/Video/Youtube.php: 65) PHP warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?key=AIzaSyDEqZJEfnyKAIWmbBX5IwjRWWt9-5GR1Sw&id=Xqam7fEOnGI&part=snippet,contentDetails,statistics,player): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
                    Павел Гвоздь
                    18 октября 2015, 12:09
                    0
                    Значит что-то не так сделал. Или криво скопировал. Или не то что-то ввёл. У меня всё работает, только что проверил. Не воспроизводится…
                      Jenya Filimonov
                      18 октября 2015, 12:18
                      0
                      Да скорее всего. Я только одного понять не могу, ну вот сгенерилось превью и появляется ролик, сразу под строкой ввода адреса. Как сделать чтобы это опубликовалось в самом тикете. Ни привью ни ролик не появляются в самом тикете. Ну у меня и руки…
                        Павел Гвоздь
                        18 октября 2015, 16:50
                        0
                        Как понять «опубликовалось в самом тикете»? Там в ТВ твоё сохраняется JSON строка с данными. Обработай её средствами Fenom при выводе тикета и будет тебе счастье.
          Jenya Filimonov
          18 октября 2015, 12:26
          0
          Есть и плюсы. Наконец то настроил Google для HybridAuth, пока делал Api Key. Единственный, провайдер который не хотел работать: )))
            Владимир
            10 июля 2016, 12:39
            +1
            Павел, приветствую. Тут такое дело, Яндекс не индексирует микроразметку если нет какого-то из минимальных параметров.
            Микроразметка — штука полезная, сайт с ней куда как лучше попадает в поиск.
            Речь о duration — Продолжительность видео. Поле на сайте выводится как метаданные, но оно обязательно.
            <meta itemprop="duration" content="PT6M58S">
            Судя по ResVideoGallery это поле при сохранении видео на сайте доступно. Я использую Vimeo, но этот параметр есть везде.
            Добавишь еще одно поле? Если да, пусть так же с возможностью ему назначить тивишку в настройках.
            Прошу не даром, пиши сколько заслать.
            Да, и вот скрипт обновления всех полей классно было бы встроить в компонент))) Но это уже не к спеху.
            PS ResVideoGallery у меня установлена, но ее я использую для иных целей, когда нужно много роликов на одно статью. Твой же скрипт для основного видео в статье по прежнему удобнее тем, что создав одну статью ее просто копировать в другие контексты в разные языки через Babel, видео копируется вместе с остальным контентом, менеджерам удобство и радость.
              Павел Гвоздь
              10 июля 2016, 15:18
              +1
              Готово! Смотри, так ли работает, как должно?

              пиши сколько заслать
              Сколько зашлёшь — всему буду рад. :)
                Владимир
                10 июля 2016, 16:50
                +1
                Ага, ща иду пробовать и зашлю благодарность.
                  Владимир
                  10 июля 2016, 19:43
                  +1
                  проверь в почте код протекции
                    Andrey
                    28 сентября 2016, 16:09
                    0
                    Павел, приветствую!
                    Есть небольшое затруднение в использовании сниппета…
                    Он выводит форму добавления видеоролика, но пишет access_denied

                    Все сделал по интсрукции, решил протестить на чистом MODX и чет не получается :(
                    Вот доступы в админку, вдруг чего подскажите:
                    s6762.h3.modhost.pro/manager/
                    Логин: s6762
                    Пароль: wu6Elswmk03n

                    П.С.
                    Ключ V3 действующий, в бэкенде добавление работает!
                      Andrey
                      28 сентября 2016, 16:23
                      +1
                      Кажется я понял в чем дело!
                      Видимо ему не нравится, что форма вызванная сниппетом TicketForm расположена в еще не созданном ресурсе!
                      Я уже проверил, редактируется он как надо даже через фронтэнд!

                      Но вот добавить видео сразу при первоначальном варианте не получается! Может че в сниппете сломалось или версия старая?
                        Andrey
                        28 сентября 2016, 18:03
                        0
                        Отлично! Разобрался! Просто поставил вместо этого:
                        &res=`0`
                        Вот это:
                        &res=`[[*id]]`
                        в чанке tpl.Tickets.form.create и теперь оно сохраняет туда, куда надо и форма работает!
                        Непонятно почему в примере указано:
                        &res=`0`
                        Ведь сниппет ругается на то, что такого ресурса не существует и понятное дело ссылка не вводится!
                          Павел Гвоздь
                          28 сентября 2016, 18:07
                          +2
                          и теперь оно сохраняет туда, куда надо
                          Точно туда, куда надо? Сохранять надо в ресурс, где располагается форма? Нет, ошибаюсь. Сохранит туда, куда надо, после того, как нажмём кнопку «Сохранить», но тем не менее, немного неправильно это. Сейчас посмотрю по коду, почему так происходит.
                            Павел Гвоздь
                            28 сентября 2016, 18:25
                            +2
                            Обновляйтесь до 1.2.1, поправил.
                              Andrey
                              30 сентября 2016, 08:34
                              0
                              Ага! Работает! Спасибо!
                        Владимир
                        10 июля 2016, 13:31
                        1
                        0
                        del
                          Николаевич
                          10 января 2017, 11:30
                          0
                          эм… А как пользователю удалить прикрепленный видеоролик?
                            Павел Гвоздь
                            11 января 2017, 18:02
                            0
                            эм… удалив ссылку на видео из ТВ поля?
                            Женя Савцов
                            23 января 2017, 20:09
                            0
                            [[!videoGallery.input?
                            	&tv=`video`
                            	&res=`0`
                            ]]
                            При &res=`0` в ответ приходит: Не удалось обработать ответ от сервера. Попробуйте вставить ссылку на видеоролик заново.
                              Александр Н
                              04 марта 2017, 09:14
                              0
                              Попробуйте указать корневой каталог с ресурсами Ticket. У меня 0 тоже не заработал.
                              Александр Н
                              04 марта 2017, 09:16
                              0
                              Решил прикрутить компонент к tickets. Все рекомендации выполнил. В принципе работает нормально, когда в обычном ресурсе вставляю ссылку — все дополнительные поля автоматом заполняются и эти данные могу увидеть.

                              В tickets через фронт вставляю ссылку, превью появляется, сохраняю ресурс — основная ссылка сохраняется в соответствующем поле. Но дополнительные поля не заполняются (url, id итп). Точнее, данные похоже что есть, окно плеера сообщает id, но он не может его подхватить и видео не грузится, доп поля выглядят пустыми (если смотреть через админку).

                              Если редактирую этот созданный ресурс обычным способом, через админку. вставляю заново ссылку — доп. поля визуально заполняются данными, id подхватывается, все начинает работать.…

                              Может каких то прав не хватает, не смог разобраться.
                              Если кто-то сталкивался. подскажите пожалуйста, как решить.
                                Павел Гвоздь
                                04 марта 2017, 10:48
                                0
                                Так и должно быть. Эти поля на JS заполняются
                                  Александр Н
                                  04 марта 2017, 11:28
                                  0
                                  К своему сожалению не понял, как добиться заполнения этих полей с фронта, при использовании tickets. Павел, поясните пожалуйста немного подробнее.

                                  В моём случае:

                                  — В настройках компонента все поля указаны, ключ в наличии.
                                  — общий tv video в наличии
                                  — При работе через админку поля успешно заполняются. В чанках ticket использовал рекомендации. указанные в этом посте.

                                  Видео пытаюсь вывести с подстановкой в плеер id конкретного видео. Когда поле id заполнено, всё замечательно работает. Но если работаю через фронт, получаю в плеере сообщение:
                                  «Ошибка. Повторите попытку позже. Идентификатор воспроизведения:… Подробнее.»
                                    Павел Гвоздь
                                    04 марта 2017, 14:59
                                    0
                                    А зачем их заполнять? Используйте поле, которое заполняется в JSON формате. Его легко распарсить на Fenom.
                                      Александр Н
                                      04 марта 2017, 15:02
                                      0
                                      Думаю дошло до меня. буду пробовать таким образом. Спасибо )
                                        Александр Н
                                        05 апреля 2017, 02:12
                                        0
                                        В конце концов я победил таким способом:

                                        [[!pdoResources?
                                        &decodeJSON=`0`
                                        &depth=`2`
                                        &parents=`135`
                                        &resources=`[[*id]]`
                                        &tpl=`videoblog`
                                        &includeTVs=`video`
                                        &tvPrefix=``
                                        ]]


                                        Чанк videoblog:

                                        {set $video_json = json_decode($_pls['video'], true)}
                                        
                                        {if $video_json.video?}
                                        	<br /><br />
                                        	<div><img src="{$video_json.image}" /></div>
                                        
                                        	{if $video_json.title?}
                                        		<div><br /><b>Название:</b> {$video_json.title}</div>
                                        	{/if}
                                        
                                        	<br />
                                        	{if $video_json.desc?}
                                        		<div><b>Описание:</b> {$video_json.desc}</div>
                                        	{/if}
                                        	<br /><hr /><br />
                                        	<div align="center"><iframe width="560" height="315" src="{$video_json.video}" frameborder="0" allowfullscreen></iframe></div>
                                        	
                                        {else}
                                        <br />
                                        {/if}
                                          Александр Н
                                          05 апреля 2017, 02:19
                                          0
                                          И ещё момент. Если сайт на https, то использование в адресе видео префикса «http://» не отображает само видео в плеере. В общем, здесь победа заключалась в изменении «http» на «https», в строках файла "/core/components/videogallery/lib/videoThumb/videoThumb.php", № 46, 51, 52 (для остальных видеохостингов не проверял, но заранее поменял (строки ниже))
                                            neyron
                                            27 апреля 2017, 10:33
                                            0
                                            Это во-первых не решает проблему у меня, а во-вторых ломается парсер ссылок в самой админке при редактировании самого поля. Вот сейчас ищу иные варианты
                                              neyron
                                              27 апреля 2017, 10:51
                                              0
                                              Работает, если сделать вот так:
                                              <iframe width=«600» height=«420» src="{$video_json['video'] | replace: «http»: «https»}" frameborder=«0» allowfullscreen>
                                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                39