Как сделать ссылку на элемент коллекции modx
Перейти к содержимому

Как сделать ссылку на элемент коллекции modx

  • автор:

кому не лень, поделитесь опытом по javascript

где this.config.filterWrapper это идентификатор формы.
Работает как нужно — события изменения любого элемента этой формы запускают этот код и что важно — this всегда ссылается на форму. Что позволяет следующей строкой получить в переменную все значения всех элементов формы, неважно какой именно был изменен.

Начинаю разбираться с событиями в javascript.
Опираюсь на это learn.javascript.ru/introduction-browser-events
и там описывается три способа создать реакцию на событие.

Есть три способа назначения обработчиков событий:
Атрибут HTML: onclick=». «.
DOM-свойство: elem.onclick = function.
Специальные методы: elem.addEventListener(event, handler[, phase]) для добавления, removeEventListener для удаления.

Ну работать с инлайновым js и вписывать его в html не солидно, путаюсь понять работу addEventListener.
Пишу вот такое

document.addEventListener('change', function (event) { console.log(event.target); })

смущает тот факт, что отслеживаются все события change возникающие в документе (подозреваю что jquery работает под капотом так же просто это скрыто от нас). Но проблема на лицо — как отслеживать события только внутри определенной формы? На странице может быть их много. Приходит в голову мысль, что раз у нас есть объект event то через него можно проверять кто инициатор, кто target и уже по условию проверять наш ли это пациент. Но ожидаемо, что targеt это не есть форма, это dom элемент, на котором произошло событие — input, select и так далее. А значит мне по прежнему ничего не известно о том, из какой конкретно формы этот элемент. Да можно пытаться у каждого элемента проверять кто его предок, проверять у предка id и смотреть не наша ли это форма, но это плохо и плюс формы на всегда содержит только тег form и сразу inputы, там может быть сложная разметка div, span что угодно.

Так как же правильно обработать событие change чтобы в идеале event.target указывавал на форму в которой произошло измеенние, а не на сам элемент или хотя бы, а как грамотные люди определяют в какой форме на странице произошло изменение?

PageBlocks 1.2.0. Создавай сайт быстро и легко.

Вместе с созданием блока в конструкторе создается и чанк с названием, которое указано в соответствующем поле конструктора. Там же добавлена вкладка чанк, где указываетcя код чанка.

Соответственно при удалении блока, соответствующий чанк будет также удален.
Через системные настройки можно отключить создание или удаление чанка:

  • pageblocks_create_chunk — отключить, чтобы не создавался чанк.
  • pageblocks_remove_chunk — отключить, чтобы не удалялся чанк.

Но, обновить чанк можно не только в конструкторе, а в любом блоке на странице.

3. Копирование блоков из ресурса

4. Копирование блоков по id

Тут, все очень просто, указывает id блока, который нужно скопировать и все.

5. Коллекции

Коллекции были и раньше, но кое-что изменилось.
1. Появилась возможность управлять позицией вкладки. По умолчанию вкладка с коллекцией идет за вкладкой PageBlocks.
2. Если коллекция используется в связке с ресурсом, то все поля синхронизируются. То есть, если изменить что-то в ресурсе, то и в блоке соответствующие поля будут также изменены и наоборот.

Расширить таблицу ресурсов теперь можно на отдельной вкладке.

Пример:
Используем коллекцию как статьи блога. Нужно поле img, которое выводит главную картинку на странице статьи. Конечно, можно добавить tv, но весь смысл PageBlocks — это отказаться от тивишек, и управлять контентом в одной таблице. Так вот добавляем новое поле в ресурсы — img и при создании блока (статьи) заполняем данное поле, вспоминаем что все поля синхронизируются, поэтому данное поле будет заполнено и в ресурсе, а значит на самой странице можно вывести его как стандартное поле.

{$_modx->resource.img} или [[+img]]

6. Новые поля

Добавлены новые поля, а именно: видео,видеогалерея, список Да/Нет, ACE и логический флажок.

Видео

Может распарсить ссылку с YouTube и Vimeo. Соответственно добавлены системные настройки pageblocks_youtube_api_key (ключ Youtube API) и pageblocks_vimeo_api_key (ключ Vimeo API)

Как получить ключи можно почитать здесь:

  • Youtube (добавил свой ключ, поэтому прошу не увлекаться. Если вы парсите много видео, то укажите свой ключ, это легко и бесплатно.)
  • Vimeo

Поле видео имеет 3 тригера:
1. крестик — очищает поле
2. обновление — сбрасывает все данные видео по умолчанию. Например, изменили название видео или превью, а потом передумали и теперь нужно вернуть все назад, нажимаем иконку и данные восстанавливаются.
3. редактирование — открывается окно с полями, которые можно редактировать: название видео, превью и описание.

На фронте переменная — это массив:

$video 
[0] => Array (  => http://www.youtube.com/watch?v=SiWeDyc867o [title] => Заставь свой мозг работать | Эми Брэнн [description] => 'Описание' [provider] => YouTube [thumbnail] => https://i.ytimg.com/vi/SiWeDyc867o/sddefault.jpg [thumbnail_width] => 640 [thumbnail_height] => 480 [embed_video] => http://www.youtube.com/embed/SiWeDyc867o [video_id] => SiWeDyc867o )
Видеогалерея

Список Да/Нет

ACE

Если вы установили компонент ACE, то будет доступно соответствующее поле.

Логический флажок

Настройка поля:

Поле в блоке:

Xtype поле
  • modx-combo-context (список контекстов)
  • modx-combo-template (список шаблонов)
  • modx-description (описание)
  • modx-field-parent-change (выбор ресурса при клике на него в дереве ресурсов)
  • modx-combo-user (список пользователей)
  • modx-combo-country (список стран)
  • statictextfield (статическое поле, которое не редактируется)
  • label (показываем только заголовок поля)
Галерея

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

7. Сниппет PageBlocks

Используется для вывода блоков.
Параметры сниппета:

Имя Описание По умолчанию
id Id блока
object_id Id привязанного ресурса 0
rid Id ресурса Текущий ресурс
cid Id конструктора блока
collection Id коллекции 0
context Контекст Текущий контекст
cultureKey Язык из системной настройки cultureKey
up Параметр, который позволяет искать условие у родителей 0
fastMode Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. 0
where Массив дополнительных параметров выборки, закодированный в JSON.
showLog Показывать дополнительную информацию о работе сниппета. 0
return Формат вывода данных. Возможные значения: chunk, data и json chunk

Примеры:

1. Выводим все активные блоки текущего ресурса

'!PageBlocks' 

2. Выводим все блоки из ресурса c id 7

'!PageBlocks' 

3. Выводим блок с id 7

'!PageBlocks' 

Если указан параметр id, то все остальные параметры игнорируются, кроме where.

4. Выводим блоки коллекции текущего ресурса

'!PageBlocks' 

5. Выводим блоки с условием

'!PageBlocks' 

6. Помните, я приводил пример, что коллекцию можно использовать как статьи для блога. Так вот, если мы не расширили таблицу ресурсов (ну не хочу трогать таблицу и все), но нужно получить все данные блока на странице статьи (ресурса), то это делается легко:

 snippet: [ 'object_id' => 

PageBlocks 1.2.0. Создавай сайт быстро и легко.

Вместе с созданием блока в конструкторе создается и чанк с названием, которое указано в соответствующем поле конструктора. Там же добавлена вкладка чанк, где указываетcя код чанка.

Соответственно при удалении блока, соответствующий чанк будет также удален.
Через системные настройки можно отключить создание или удаление чанка:

  • pageblocks_create_chunk — отключить, чтобы не создавался чанк.
  • pageblocks_remove_chunk — отключить, чтобы не удалялся чанк.
Но, обновить чанк можно не только в конструкторе, а в любом блоке на странице.

3. Копирование блоков из ресурса

4. Копирование блоков по id

Тут, все очень просто, указывает id блока, который нужно скопировать и все.

5. Коллекции

Коллекции были и раньше, но кое-что изменилось.
1. Появилась возможность управлять позицией вкладки. По умолчанию вкладка с коллекцией идет за вкладкой PageBlocks.
2. Если коллекция используется в связке с ресурсом, то все поля синхронизируются. То есть, если изменить что-то в ресурсе, то и в блоке соответствующие поля будут также изменены и наоборот.

Расширить таблицу ресурсов теперь можно на отдельной вкладке.

Пример:
Используем коллекцию как статьи блога. Нужно поле img, которое выводит главную картинку на странице статьи. Конечно, можно добавить tv, но весь смысл PageBlocks — это отказаться от тивишек, и управлять контентом в одной таблице. Так вот добавляем новое поле в ресурсы — img и при создании блока (статьи) заполняем данное поле, вспоминаем что все поля синхронизируются, поэтому данное поле будет заполнено и в ресурсе, а значит на самой странице можно вывести его как стандартное поле.

{$_modx->resource.img} или [[+img]]

6. Новые поля

Добавлены новые поля, а именно: видео,видеогалерея, список Да/Нет, ACE и логический флажок.

Видео

Может распарсить ссылку с YouTube и Vimeo. Соответственно добавлены системные настройки pageblocks_youtube_api_key (ключ Youtube API) и pageblocks_vimeo_api_key (ключ Vimeo API)

Как получить ключи можно почитать здесь:

  • Youtube (добавил свой ключ, поэтому прошу не увлекаться. Если вы парсите много видео, то укажите свой ключ, это легко и бесплатно.)
  • Vimeo

Поле видео имеет 3 тригера:
1. крестик — очищает поле
2. обновление — сбрасывает все данные видео по умолчанию. Например, изменили название видео или превью, а потом передумали и теперь нужно вернуть все назад, нажимаем иконку и данные восстанавливаются.
3. редактирование — открывается окно с полями, которые можно редактировать: название видео, превью и описание.

На фронте переменная — это массив:

$video 
[0] => Array (  => http://www.youtube.com/watch?v=SiWeDyc867o [title] => Заставь свой мозг работать | Эми Брэнн [description] => 'Описание' [provider] => YouTube [thumbnail] => https://i.ytimg.com/vi/SiWeDyc867o/sddefault.jpg [thumbnail_width] => 640 [thumbnail_height] => 480 [embed_video] => http://www.youtube.com/embed/SiWeDyc867o [video_id] => SiWeDyc867o )
Видеогалерея

Список Да/Нет

ACE

Если вы установили компонент ACE, то будет доступно соответствующее поле.

Логический флажок

Настройка поля:

Поле в блоке:

Xtype поле
  • modx-combo-context (список контекстов)
  • modx-combo-template (список шаблонов)
  • modx-description (описание)
  • modx-field-parent-change (выбор ресурса при клике на него в дереве ресурсов)
  • modx-combo-user (список пользователей)
  • modx-combo-country (список стран)
  • statictextfield (статическое поле, которое не редактируется)
  • label (показываем только заголовок поля)
Галерея

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

7. Сниппет PageBlocks

Используется для вывода блоков.
Параметры сниппета:

Имя Описание По умолчанию
id Id блока -
object_id Id привязанного ресурса 0
rid Id ресурса Текущий ресурс
cid Id конструктора блока -
collection Id коллекции 0
context Контекст Текущий контекст
cultureKey Язык из системной настройки cultureKey
up Параметр, который позволяет искать условие у родителей 0
fastMode Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. 0
where Массив дополнительных параметров выборки, закодированный в JSON. -
showLog Показывать дополнительную информацию о работе сниппета. 0
return Формат вывода данных. Возможные значения: chunk, data и json chunk

Примеры:

1. Выводим все активные блоки текущего ресурса

'!PageBlocks' 

2. Выводим все блоки из ресурса c id 7

'!PageBlocks' 

3. Выводим блок с id 7

'!PageBlocks' 

Если указан параметр id, то все остальные параметры игнорируются, кроме where.

4. Выводим блоки коллекции текущего ресурса

'!PageBlocks' 

5. Выводим блоки с условием

'!PageBlocks' 

6. Помните, я приводил пример, что коллекцию можно использовать как статьи для блога. Так вот, если мы не расширили таблицу ресурсов (ну не хочу трогать таблицу и все), но нужно получить все данные блока на странице статьи (ресурса), то это делается легко:

 snippet: [ 'object_id' => 

PageBlocks 1.2.0. Создавай сайт быстро и легко.

Вместе с созданием блока в конструкторе создается и чанк с названием, которое указано в соответствующем поле конструктора. Там же добавлена вкладка чанк, где указываетcя код чанка.

Соответственно при удалении блока, соответствующий чанк будет также удален.
Через системные настройки можно отключить создание или удаление чанка:

  • pageblocks_create_chunk — отключить, чтобы не создавался чанк.
  • pageblocks_remove_chunk — отключить, чтобы не удалялся чанк.
Но, обновить чанк можно не только в конструкторе, а в любом блоке на странице.

3. Копирование блоков из ресурса

4. Копирование блоков по id

Тут, все очень просто, указывает id блока, который нужно скопировать и все.

5. Коллекции

Коллекции были и раньше, но кое-что изменилось.
1. Появилась возможность управлять позицией вкладки. По умолчанию вкладка с коллекцией идет за вкладкой PageBlocks.
2. Если коллекция используется в связке с ресурсом, то все поля синхронизируются. То есть, если изменить что-то в ресурсе, то и в блоке соответствующие поля будут также изменены и наоборот.

Расширить таблицу ресурсов теперь можно на отдельной вкладке.

Пример:
Используем коллекцию как статьи блога. Нужно поле img, которое выводит главную картинку на странице статьи. Конечно, можно добавить tv, но весь смысл PageBlocks — это отказаться от тивишек, и управлять контентом в одной таблице. Так вот добавляем новое поле в ресурсы — img и при создании блока (статьи) заполняем данное поле, вспоминаем что все поля синхронизируются, поэтому данное поле будет заполнено и в ресурсе, а значит на самой странице можно вывести его как стандартное поле.

{$_modx->resource.img} или [[+img]]

6. Новые поля

Добавлены новые поля, а именно: видео,видеогалерея, список Да/Нет, ACE и логический флажок.

Видео

Может распарсить ссылку с YouTube и Vimeo. Соответственно добавлены системные настройки pageblocks_youtube_api_key (ключ Youtube API) и pageblocks_vimeo_api_key (ключ Vimeo API)

Как получить ключи можно почитать здесь:

  • Youtube (добавил свой ключ, поэтому прошу не увлекаться. Если вы парсите много видео, то укажите свой ключ, это легко и бесплатно.)
  • Vimeo

Поле видео имеет 3 тригера:
1. крестик — очищает поле
2. обновление — сбрасывает все данные видео по умолчанию. Например, изменили название видео или превью, а потом передумали и теперь нужно вернуть все назад, нажимаем иконку и данные восстанавливаются.
3. редактирование — открывается окно с полями, которые можно редактировать: название видео, превью и описание.

На фронте переменная — это массив:

$video 
[0] => Array (  => http://www.youtube.com/watch?v=SiWeDyc867o [title] => Заставь свой мозг работать | Эми Брэнн [description] => 'Описание' [provider] => YouTube [thumbnail] => https://i.ytimg.com/vi/SiWeDyc867o/sddefault.jpg [thumbnail_width] => 640 [thumbnail_height] => 480 [embed_video] => http://www.youtube.com/embed/SiWeDyc867o [video_id] => SiWeDyc867o )
Видеогалерея

Список Да/Нет

ACE

Если вы установили компонент ACE, то будет доступно соответствующее поле.

Логический флажок

Настройка поля:

Поле в блоке:

Xtype поле
  • modx-combo-context (список контекстов)
  • modx-combo-template (список шаблонов)
  • modx-description (описание)
  • modx-field-parent-change (выбор ресурса при клике на него в дереве ресурсов)
  • modx-combo-user (список пользователей)
  • modx-combo-country (список стран)
  • statictextfield (статическое поле, которое не редактируется)
  • label (показываем только заголовок поля)
Галерея

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

7. Сниппет PageBlocks

Используется для вывода блоков.
Параметры сниппета:

Имя Описание По умолчанию
id Id блока -
object_id Id привязанного ресурса 0
rid Id ресурса Текущий ресурс
cid Id конструктора блока -
collection Id коллекции 0
context Контекст Текущий контекст
cultureKey Язык из системной настройки cultureKey
up Параметр, который позволяет искать условие у родителей 0
fastMode Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. 0
where Массив дополнительных параметров выборки, закодированный в JSON. -
showLog Показывать дополнительную информацию о работе сниппета. 0
return Формат вывода данных. Возможные значения: chunk, data и json chunk

Примеры:

1. Выводим все активные блоки текущего ресурса

'!PageBlocks' 

2. Выводим все блоки из ресурса c id 7

'!PageBlocks' 

3. Выводим блок с id 7

'!PageBlocks' 

Если указан параметр id, то все остальные параметры игнорируются, кроме where.

4. Выводим блоки коллекции текущего ресурса

'!PageBlocks' 

5. Выводим блоки с условием

'!PageBlocks' 

6. Помните, я приводил пример, что коллекцию можно использовать как статьи для блога. Так вот, если мы не расширили таблицу ресурсов (ну не хочу трогать таблицу и все), но нужно получить все данные блока на странице статьи (ресурса), то это делается легко:

 snippet: [ 'object_id' => 

PageBlocks 1.2.0. Создавай сайт быстро и легко.

Вместе с созданием блока в конструкторе создается и чанк с названием, которое указано в соответствующем поле конструктора. Там же добавлена вкладка чанк, где указываетcя код чанка.

Соответственно при удалении блока, соответствующий чанк будет также удален.
Через системные настройки можно отключить создание или удаление чанка:

  • pageblocks_create_chunk — отключить, чтобы не создавался чанк.
  • pageblocks_remove_chunk — отключить, чтобы не удалялся чанк.
Но, обновить чанк можно не только в конструкторе, а в любом блоке на странице.

3. Копирование блоков из ресурса

4. Копирование блоков по id

Тут, все очень просто, указывает id блока, который нужно скопировать и все.

5. Коллекции

Коллекции были и раньше, но кое-что изменилось.
1. Появилась возможность управлять позицией вкладки. По умолчанию вкладка с коллекцией идет за вкладкой PageBlocks.
2. Если коллекция используется в связке с ресурсом, то все поля синхронизируются. То есть, если изменить что-то в ресурсе, то и в блоке соответствующие поля будут также изменены и наоборот.

Расширить таблицу ресурсов теперь можно на отдельной вкладке.

Пример:
Используем коллекцию как статьи блога. Нужно поле img, которое выводит главную картинку на странице статьи. Конечно, можно добавить tv, но весь смысл PageBlocks — это отказаться от тивишек, и управлять контентом в одной таблице. Так вот добавляем новое поле в ресурсы — img и при создании блока (статьи) заполняем данное поле, вспоминаем что все поля синхронизируются, поэтому данное поле будет заполнено и в ресурсе, а значит на самой странице можно вывести его как стандартное поле.

{$_modx->resource.img} или [[+img]]

6. Новые поля

Добавлены новые поля, а именно: видео,видеогалерея, список Да/Нет, ACE и логический флажок.

Видео

Может распарсить ссылку с YouTube и Vimeo. Соответственно добавлены системные настройки pageblocks_youtube_api_key (ключ Youtube API) и pageblocks_vimeo_api_key (ключ Vimeo API)

Как получить ключи можно почитать здесь:

  • Youtube (добавил свой ключ, поэтому прошу не увлекаться. Если вы парсите много видео, то укажите свой ключ, это легко и бесплатно.)
  • Vimeo

Поле видео имеет 3 тригера:
1. крестик — очищает поле
2. обновление — сбрасывает все данные видео по умолчанию. Например, изменили название видео или превью, а потом передумали и теперь нужно вернуть все назад, нажимаем иконку и данные восстанавливаются.
3. редактирование — открывается окно с полями, которые можно редактировать: название видео, превью и описание.

На фронте переменная — это массив:

$video 
[0] => Array (  => http://www.youtube.com/watch?v=SiWeDyc867o [title] => Заставь свой мозг работать | Эми Брэнн [description] => 'Описание' [provider] => YouTube [thumbnail] => https://i.ytimg.com/vi/SiWeDyc867o/sddefault.jpg [thumbnail_width] => 640 [thumbnail_height] => 480 [embed_video] => http://www.youtube.com/embed/SiWeDyc867o [video_id] => SiWeDyc867o )
Видеогалерея

Список Да/Нет

ACE

Если вы установили компонент ACE, то будет доступно соответствующее поле.

Логический флажок

Настройка поля:

Поле в блоке:

Xtype поле
  • modx-combo-context (список контекстов)
  • modx-combo-template (список шаблонов)
  • modx-description (описание)
  • modx-field-parent-change (выбор ресурса при клике на него в дереве ресурсов)
  • modx-combo-user (список пользователей)
  • modx-combo-country (список стран)
  • statictextfield (статическое поле, которое не редактируется)
  • label (показываем только заголовок поля)
Галерея

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

7. Сниппет PageBlocks

Используется для вывода блоков.
Параметры сниппета:

Имя Описание По умолчанию
id Id блока -
object_id Id привязанного ресурса 0
rid Id ресурса Текущий ресурс
cid Id конструктора блока -
collection Id коллекции 0
context Контекст Текущий контекст
cultureKey Язык из системной настройки cultureKey
up Параметр, который позволяет искать условие у родителей 0
fastMode Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. 0
where Массив дополнительных параметров выборки, закодированный в JSON. -
showLog Показывать дополнительную информацию о работе сниппета. 0
return Формат вывода данных. Возможные значения: chunk, data и json chunk

Примеры:

1. Выводим все активные блоки текущего ресурса

'!PageBlocks' 

2. Выводим все блоки из ресурса c id 7

'!PageBlocks' 

3. Выводим блок с id 7

'!PageBlocks' 

Если указан параметр id, то все остальные параметры игнорируются, кроме where.

4. Выводим блоки коллекции текущего ресурса

'!PageBlocks' 

5. Выводим блоки с условием

'!PageBlocks' 

6. Помните, я приводил пример, что коллекцию можно использовать как статьи для блога. Так вот, если мы не расширили таблицу ресурсов (ну не хочу трогать таблицу и все), но нужно получить все данные блока на странице статьи (ресурса), то это делается легко:

set $block = '!PageBlocks'  {set $values = $block[0]['values']}

$values — массив всех полей

И теперь на странице выводим превью

8. События

  • pbBeforeSaveImage (вызывается до сохранения файла)
    • $id (0)
    • $data (массив данных)
    • $object (объект blockFile)
    • $id (id объекта)
    • $object (объект blockFile)
    • $id (id объекта)
    • $object (объект blockFile)
    • $id (id объекта)
    • $object (объект blockFile)
    • $mode (new или upd)
    • $id (id объекта, если $mode == 'new', то $id = 0)
    • $data (массив данных)
    • $object (объект pageBlock)
    • $mode (new или upd)
    • $id (id объекта)
    • $object (объект pageBlock)
    • $id (id объекта)
    • $object (объект blockFile)
    • $id (id объекта)
    • $object (объект blockFile)
    pbBeforeSaveImage

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

    getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveImage': // Переименовываем файл $PageBlocks->files->renameFile($object, 'pb_' . $object->name); // Изменяем формат загружаемых картинок. $PageBlocks->files->changeFormat($object, 'webp'); // Создаем превью $params = array( 'w' => 300, // Ширина 'h' => 200, // Высота 'bg' => 'ffffff', // Фон 'q' => 80, // Качество в % 'zc' => 'C', // Обрезка, TL - это Top Left, есть еще C - center, BR - Bootom Right и т.д. 'f' => 'webp', // Формат изображения ); // Каталог, куда будем загружать файл $new_path = $object->path . $object->resource_id . '/' . $object->block_id . '/webp'; // gallery/1/410/webp // Генерируем новый файл $PageBlocks->files->generateThumbnail($object, $params, $new_path); // Перемещаем файл в другую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->moveFile($object, $new_path); break; }

    Важно отметить, что при смене формата создается копия файла с новым форматом. По умолчанию файл будет создаваться в текущей директории, но ее можно изменить передав путь в 3-м параметре метода changeFormat.

    // Изменяем формат загружаемых картинок и загружаем ее в новую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->changeFormat($object, 'webp', $new_path);
    pbBeforeRemoveImage

    Здесь до удаления файла, можем удалить все превью и другие файлы.

    getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeRemoveImage': // Удаляем превью $objectPath = $object->path . $object->resource_id . '/' . $object->block_id . '/webp/' . $file->filename; $PageBlocks->files->removeFile($object->source, $objectPath); break; }

    $objectPath — путь к картинке. Ранее мы загружали в данную папку превью.

    pbBeforeSaveBlock

    Вызывается при сохранении блока до формирования значений. Изменения связанных объектов попадут в значение блока.

    getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveBlock': // Получаем все картинки из галереи $files = $object->getMany('Files'); // Получаем все видео из видеогалереи $videos = $object->getMany('Videos'); // Получаем все таблицы $tables = $object->getMany('Tables'); // Получаем конструктор данного блока, но конструктор изменять нельзя, чисто для получения данных. $constructor = $object->getOne('Constructor'); break; }
    pbAfterSaveBlock

    Вызывается при сохранении блока после формирования значения, поэтому здесь мы можем уже изменить данные блока напрямую.

    getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbAfterSaveBlock': // Получаем значения блока $values = json_decode($object->values,1); // Делаем какие-то изменения с $values . // Сохраняем новое значение $object->set('values', json_encode($values)); $object->save(); break; }

    Планы:

    • Добавить два поля: карта и теги.
    • Улучшить политику доступа
    • Перенос настроек между сайтами. Создали блоки на одном сайте и потом можно использовать эти блоки на других сайтах, чтобы не терять время на создание одинаковых блоков.
    • Создавать отдельные страницы в админке с помощью коллекций у которых будет свое собственное меню.
    • Рендер на сервере. Тут, конечно же, нужно много тестировать, но если все получиться, то можно будет сразу выводить готовый контент, но опять же, это годиться только для статических страниц. А для динамических, может запускать обновление по крону, не знаю. Этот пункт пока на рассмотрении.

    Выводы:

    Это обновление сделало компонент еще лучше и еще быстрее (был произведен рефакторинг кода), что позволит создавать сайты еще быстрее и легче. Еще раз большое спасибо всем, кто поддерживал меня и отдельное спасибо @Олег Щавелев за его терпение и вклад. На протяжении целого месяца, а это именно столько времени заняла новая версия компонента, мы с ним общались, выявляли баги, обсуждали новые идеи, которые, кстати, еще не все реализованы. И больше всех он ждал этого обновления.
    И теперь немного дёгтя — стоимость компонента с 15 октября будет увеличена на 500 руб. Да, вы можете подумать, что это много и за такую цену лучше использовать другой бесплатный инструмент, но на самом деле было потрачено много времени на разработку, и это еще далеко не конец, и те кто уже пользуется данным компонентом знают какой он удобный и позволяет не терять время при разработке сайта.

    Всем добра и будьте здоровы!

    07 октября 2021, 08:34

    Aleksandr Huz /users/boshnik modx.pro https://modx.pro

    modx->resource.id, 'return' => 'json' ] {set $values = $block[0]['values']}

    $values — массив всех полей

    И теперь на странице выводим превью

    8. События

    • pbBeforeSaveImage (вызывается до сохранения файла)
      • $id (0)
      • $data (массив данных)
      • $object (объект blockFile)
      • $id (id объекта)
      • $object (объект blockFile)
      • $id (id объекта)
      • $object (объект blockFile)
      • $id (id объекта)
      • $object (объект blockFile)
      • $mode (new или upd)
      • $id (id объекта, если $mode == 'new', то $id = 0)
      • $data (массив данных)
      • $object (объект pageBlock)
      • $mode (new или upd)
      • $id (id объекта)
      • $object (объект pageBlock)
      • $id (id объекта)
      • $object (объект blockFile)
      • $id (id объекта)
      • $object (объект blockFile)
      pbBeforeSaveImage

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

      getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveImage': // Переименовываем файл $PageBlocks->files->renameFile($object, 'pb_' . $object->name); // Изменяем формат загружаемых картинок. $PageBlocks->files->changeFormat($object, 'webp'); // Создаем превью $params = array( 'w' => 300, // Ширина 'h' => 200, // Высота 'bg' => 'ffffff', // Фон 'q' => 80, // Качество в % 'zc' => 'C', // Обрезка, TL - это Top Left, есть еще C - center, BR - Bootom Right и т.д. 'f' => 'webp', // Формат изображения ); // Каталог, куда будем загружать файл $new_path = $object->path . $object->resource_id . '/' . $object->block_id . '/webp'; // gallery/1/410/webp // Генерируем новый файл $PageBlocks->files->generateThumbnail($object, $params, $new_path); // Перемещаем файл в другую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->moveFile($object, $new_path); break; }

      Важно отметить, что при смене формата создается копия файла с новым форматом. По умолчанию файл будет создаваться в текущей директории, но ее можно изменить передав путь в 3-м параметре метода changeFormat.

      // Изменяем формат загружаемых картинок и загружаем ее в новую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->changeFormat($object, 'webp', $new_path);
      pbBeforeRemoveImage

      Здесь до удаления файла, можем удалить все превью и другие файлы.

      getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeRemoveImage': // Удаляем превью $objectPath = $object->path . $object->resource_id . '/' . $object->block_id . '/webp/' . $file->filename; $PageBlocks->files->removeFile($object->source, $objectPath); break; }

      $objectPath — путь к картинке. Ранее мы загружали в данную папку превью.

      pbBeforeSaveBlock

      Вызывается при сохранении блока до формирования значений. Изменения связанных объектов попадут в значение блока.

      getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveBlock': // Получаем все картинки из галереи $files = $object->getMany('Files'); // Получаем все видео из видеогалереи $videos = $object->getMany('Videos'); // Получаем все таблицы $tables = $object->getMany('Tables'); // Получаем конструктор данного блока, но конструктор изменять нельзя, чисто для получения данных. $constructor = $object->getOne('Constructor'); break; }
      pbAfterSaveBlock

      Вызывается при сохранении блока после формирования значения, поэтому здесь мы можем уже изменить данные блока напрямую.

      getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbAfterSaveBlock': // Получаем значения блока $values = json_decode($object->values,1); // Делаем какие-то изменения с $values . // Сохраняем новое значение $object->set('values', json_encode($values)); $object->save(); break; }

      Планы:

      • Добавить два поля: карта и теги.
      • Улучшить политику доступа
      • Перенос настроек между сайтами. Создали блоки на одном сайте и потом можно использовать эти блоки на других сайтах, чтобы не терять время на создание одинаковых блоков.
      • Создавать отдельные страницы в админке с помощью коллекций у которых будет свое собственное меню.
      • Рендер на сервере. Тут, конечно же, нужно много тестировать, но если все получиться, то можно будет сразу выводить готовый контент, но опять же, это годиться только для статических страниц. А для динамических, может запускать обновление по крону, не знаю. Этот пункт пока на рассмотрении.

      Выводы:

      Это обновление сделало компонент еще лучше и еще быстрее (был произведен рефакторинг кода), что позволит создавать сайты еще быстрее и легче. Еще раз большое спасибо всем, кто поддерживал меня и отдельное спасибо @Олег Щавелев за его терпение и вклад. На протяжении целого месяца, а это именно столько времени заняла новая версия компонента, мы с ним общались, выявляли баги, обсуждали новые идеи, которые, кстати, еще не все реализованы. И больше всех он ждал этого обновления.
      И теперь немного дёгтя — стоимость компонента с 15 октября будет увеличена на 500 руб. Да, вы можете подумать, что это много и за такую цену лучше использовать другой бесплатный инструмент, но на самом деле было потрачено много времени на разработку, и это еще далеко не конец, и те кто уже пользуется данным компонентом знают какой он удобный и позволяет не терять время при разработке сайта.

      Всем добра и будьте здоровы!

      07 октября 2021, 08:34

      Aleksandr Huz /users/boshnik modx.pro https://modx.pro

      modx->resource.id, 'return' => 'json' ] {set $values = $block[0]['values']}

      $values — массив всех полей

      И теперь на странице выводим превью

      8. События

      • pbBeforeSaveImage (вызывается до сохранения файла)
        • $id (0)
        • $data (массив данных)
        • $object (объект blockFile)
        • $id (id объекта)
        • $object (объект blockFile)
        • $id (id объекта)
        • $object (объект blockFile)
        • $id (id объекта)
        • $object (объект blockFile)
        • $mode (new или upd)
        • $id (id объекта, если $mode == 'new', то $id = 0)
        • $data (массив данных)
        • $object (объект pageBlock)
        • $mode (new или upd)
        • $id (id объекта)
        • $object (объект pageBlock)
        • $id (id объекта)
        • $object (объект blockFile)
        • $id (id объекта)
        • $object (объект blockFile)
        pbBeforeSaveImage

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

        getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveImage': // Переименовываем файл $PageBlocks->files->renameFile($object, 'pb_' . $object->name); // Изменяем формат загружаемых картинок. $PageBlocks->files->changeFormat($object, 'webp'); // Создаем превью $params = array( 'w' => 300, // Ширина 'h' => 200, // Высота 'bg' => 'ffffff', // Фон 'q' => 80, // Качество в % 'zc' => 'C', // Обрезка, TL - это Top Left, есть еще C - center, BR - Bootom Right и т.д. 'f' => 'webp', // Формат изображения ); // Каталог, куда будем загружать файл $new_path = $object->path . $object->resource_id . '/' . $object->block_id . '/webp'; // gallery/1/410/webp // Генерируем новый файл $PageBlocks->files->generateThumbnail($object, $params, $new_path); // Перемещаем файл в другую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->moveFile($object, $new_path); break; }

        Важно отметить, что при смене формата создается копия файла с новым форматом. По умолчанию файл будет создаваться в текущей директории, но ее можно изменить передав путь в 3-м параметре метода changeFormat.

        // Изменяем формат загружаемых картинок и загружаем ее в новую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->changeFormat($object, 'webp', $new_path);
        pbBeforeRemoveImage

        Здесь до удаления файла, можем удалить все превью и другие файлы.

        getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeRemoveImage': // Удаляем превью $objectPath = $object->path . $object->resource_id . '/' . $object->block_id . '/webp/' . $file->filename; $PageBlocks->files->removeFile($object->source, $objectPath); break; }

        $objectPath — путь к картинке. Ранее мы загружали в данную папку превью.

        pbBeforeSaveBlock

        Вызывается при сохранении блока до формирования значений. Изменения связанных объектов попадут в значение блока.

        getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveBlock': // Получаем все картинки из галереи $files = $object->getMany('Files'); // Получаем все видео из видеогалереи $videos = $object->getMany('Videos'); // Получаем все таблицы $tables = $object->getMany('Tables'); // Получаем конструктор данного блока, но конструктор изменять нельзя, чисто для получения данных. $constructor = $object->getOne('Constructor'); break; }
        pbAfterSaveBlock

        Вызывается при сохранении блока после формирования значения, поэтому здесь мы можем уже изменить данные блока напрямую.

        getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbAfterSaveBlock': // Получаем значения блока $values = json_decode($object->values,1); // Делаем какие-то изменения с $values . // Сохраняем новое значение $object->set('values', json_encode($values)); $object->save(); break; }

        Планы:

        • Добавить два поля: карта и теги.
        • Улучшить политику доступа
        • Перенос настроек между сайтами. Создали блоки на одном сайте и потом можно использовать эти блоки на других сайтах, чтобы не терять время на создание одинаковых блоков.
        • Создавать отдельные страницы в админке с помощью коллекций у которых будет свое собственное меню.
        • Рендер на сервере. Тут, конечно же, нужно много тестировать, но если все получиться, то можно будет сразу выводить готовый контент, но опять же, это годиться только для статических страниц. А для динамических, может запускать обновление по крону, не знаю. Этот пункт пока на рассмотрении.

        Выводы:

        Это обновление сделало компонент еще лучше и еще быстрее (был произведен рефакторинг кода), что позволит создавать сайты еще быстрее и легче. Еще раз большое спасибо всем, кто поддерживал меня и отдельное спасибо @Олег Щавелев за его терпение и вклад. На протяжении целого месяца, а это именно столько времени заняла новая версия компонента, мы с ним общались, выявляли баги, обсуждали новые идеи, которые, кстати, еще не все реализованы. И больше всех он ждал этого обновления.
        И теперь немного дёгтя — стоимость компонента с 15 октября будет увеличена на 500 руб. Да, вы можете подумать, что это много и за такую цену лучше использовать другой бесплатный инструмент, но на самом деле было потрачено много времени на разработку, и это еще далеко не конец, и те кто уже пользуется данным компонентом знают какой он удобный и позволяет не терять время при разработке сайта.

        Всем добра и будьте здоровы!

        07 октября 2021, 08:34

        Aleksandr Huz /users/boshnik modx.pro https://modx.pro

        modx->resource.id, 'return' => 'json' ] {set $values = $block[0]['values']}

        $values — массив всех полей

        И теперь на странице выводим превью

        8. События

        • pbBeforeSaveImage (вызывается до сохранения файла)
          • $id (0)
          • $data (массив данных)
          • $object (объект blockFile)
          • $id (id объекта)
          • $object (объект blockFile)
          • $id (id объекта)
          • $object (объект blockFile)
          • $id (id объекта)
          • $object (объект blockFile)
          • $mode (new или upd)
          • $id (id объекта, если $mode == ‘new’, то $id = 0)
          • $data (массив данных)
          • $object (объект pageBlock)
          • $mode (new или upd)
          • $id (id объекта)
          • $object (объект pageBlock)
          • $id (id объекта)
          • $object (объект blockFile)
          • $id (id объекта)
          • $object (объект blockFile)
          pbBeforeSaveImage

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

          getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveImage': // Переименовываем файл $PageBlocks->files->renameFile($object, 'pb_' . $object->name); // Изменяем формат загружаемых картинок. $PageBlocks->files->changeFormat($object, 'webp'); // Создаем превью $params = array( 'w' => 300, // Ширина 'h' => 200, // Высота 'bg' => 'ffffff', // Фон 'q' => 80, // Качество в % 'zc' => 'C', // Обрезка, TL - это Top Left, есть еще C - center, BR - Bootom Right и т.д. 'f' => 'webp', // Формат изображения ); // Каталог, куда будем загружать файл $new_path = $object->path . $object->resource_id . '/' . $object->block_id . '/webp'; // gallery/1/410/webp // Генерируем новый файл $PageBlocks->files->generateThumbnail($object, $params, $new_path); // Перемещаем файл в другую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->moveFile($object, $new_path); break; }

          Важно отметить, что при смене формата создается копия файла с новым форматом. По умолчанию файл будет создаваться в текущей директории, но ее можно изменить передав путь в 3-м параметре метода changeFormat.

          // Изменяем формат загружаемых картинок и загружаем ее в новую директорию $new_path = $object->path . $object->resource_id . '/' . $object->block_id; $PageBlocks->files->changeFormat($object, 'webp', $new_path);
          pbBeforeRemoveImage

          Здесь до удаления файла, можем удалить все превью и другие файлы.

          getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeRemoveImage': // Удаляем превью $objectPath = $object->path . $object->resource_id . '/' . $object->block_id . '/webp/' . $file->filename; $PageBlocks->files->removeFile($object->source, $objectPath); break; }

          $objectPath — путь к картинке. Ранее мы загружали в данную папку превью.

          pbBeforeSaveBlock

          Вызывается при сохранении блока до формирования значений. Изменения связанных объектов попадут в значение блока.

          getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbBeforeSaveBlock': // Получаем все картинки из галереи $files = $object->getMany('Files'); // Получаем все видео из видеогалереи $videos = $object->getMany('Videos'); // Получаем все таблицы $tables = $object->getMany('Tables'); // Получаем конструктор данного блока, но конструктор изменять нельзя, чисто для получения данных. $constructor = $object->getOne('Constructor'); break; }
          pbAfterSaveBlock

          Вызывается при сохранении блока после формирования значения, поэтому здесь мы можем уже изменить данные блока напрямую.

          getService('pageblocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/'); switch ($modx->event->name) { case 'pbAfterSaveBlock': // Получаем значения блока $values = json_decode($object->values,1); // Делаем какие-то изменения с $values . // Сохраняем новое значение $object->set('values', json_encode($values)); $object->save(); break; }

          Планы:

          • Добавить два поля: карта и теги.
          • Улучшить политику доступа
          • Перенос настроек между сайтами. Создали блоки на одном сайте и потом можно использовать эти блоки на других сайтах, чтобы не терять время на создание одинаковых блоков.
          • Создавать отдельные страницы в админке с помощью коллекций у которых будет свое собственное меню.
          • Рендер на сервере. Тут, конечно же, нужно много тестировать, но если все получиться, то можно будет сразу выводить готовый контент, но опять же, это годиться только для статических страниц. А для динамических, может запускать обновление по крону, не знаю. Этот пункт пока на рассмотрении.

          Выводы:

          Это обновление сделало компонент еще лучше и еще быстрее (был произведен рефакторинг кода), что позволит создавать сайты еще быстрее и легче. Еще раз большое спасибо всем, кто поддерживал меня и отдельное спасибо @Олег Щавелев за его терпение и вклад. На протяжении целого месяца, а это именно столько времени заняла новая версия компонента, мы с ним общались, выявляли баги, обсуждали новые идеи, которые, кстати, еще не все реализованы. И больше всех он ждал этого обновления.
          И теперь немного дёгтя — стоимость компонента с 15 октября будет увеличена на 500 руб. Да, вы можете подумать, что это много и за такую цену лучше использовать другой бесплатный инструмент, но на самом деле было потрачено много времени на разработку, и это еще далеко не конец, и те кто уже пользуется данным компонентом знают какой он удобный и позволяет не терять время при разработке сайта.

          Всем добра и будьте здоровы!

          07 октября 2021, 08:34

          Aleksandr Huz /users/boshnik modx.pro https://modx.pro

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *