Можно ли добавить новые поля к фотографиям?

InstantCMS 2.X

Вопросы по фотографиям

#1 29 января 2026 в 01:11

Изображение

Подскажите пожалуйста, как здесь можно добавить поле — например, для строковое для описания адреса или поле для вставки ссылки

#2 29 января 2026 в 09:17

Изображение

#3 29 января 2026 в 11:06

 TOPg, очевидно ведь, что ваш совет не поможет. ТС нужно новое поле у фотографии.

ТС, такого в движке не предусмотрено. Добавлять поля у фотографий нельзя.

#4 29 января 2026 в 17:25

Почему нельзя прям в описании писать? Зачем еще поле?

Source: Link

© Link

@ Link

#5 29 января 2026 в 22:15

Подскажите пожалуйста, как здесь можно добавить поле — например, для строковое для описания адреса или поле для вставки ссылки

RUSLEGIONER

всё это актуально для instantcns 2.18, в других версиях может отличаться но смысл, будет понятен, обновление затрёт
sql в бд

  1. ALTER TABLE `cms_photos`
  2. ADD COLUMN `address` VARCHAR(500) DEFAULT NULL COMMENT 'Адрес/местоположение съемки' AFTER `camera`,
  3. ADD COLUMN `address_url` VARCHAR(1000) DEFAULT NULL COMMENT 'URL ссылка на карту/адрес' AFTER `address`,
  4. ADD KEY `address` (`address`(255));


в файле system/controllers/photos/actions/edit.php после

  1. $photo_types = $this->request->get('type', []);

вставить

  1. $photo_addresses = $this->request->get('address', []);
  2. $photo_address_urls = $this->request->get('address_url', []);

далее, в этом же файле

  1. $_photo = [
  2. 'title' => strip_tags(...),
  3. 'content_source' => (...),
  4. 'content' => (...),
  5. 'is_private' => (isset($photo_is_privates[$photo_id]) ? ... : 0),
  6. 'type' => (isset($photo_types[$photo_id]) ? (int) $photo_types[$photo_id] : null),
  7. тут
  8. ];
  9.  

вместо «тут» добавить

  1. 'address' => (isset($photo_addresses[$photo_id]) ? trim($photo_addresses[$photo_id]) : null),
  2. 'address_url' => (isset($photo_address_urls[$photo_id]) ? trim($photo_address_urls[$photo_id]) : null)


в файле system/controllers/photos/actions/upload.php
после

  1. if (!empty($this->options['types'])) {
  2. $photo_types = $this->request->get('type', []);
  3. }

вставить

  1. $photo_addresses = $this->request->get('address', []);
  2. $photo_address_urls = $this->request->get('address_url', []);


и ниже 

  1. $_photo = [
  2. 'date_pub' => null,
  3. 'album_id' => $this->album['id'],
  4. 'title' => strip_tags($photo_titles[$photo_id] ? $photo_titles[$photo_id] : sprintf(LANG_PHOTOS_PHOTO_UNTITLED, $photo_id)),
  5. 'content_source' => ($photo_contents[$photo_id] ? cmsEventsManager::hook('html_filter', [
  6. 'text' => $photo_contents[$photo_id],
  7. 'is_process_callback' => false,
  8. 'typograph_id' => $this->options['typograph_id'],
  9. 'is_auto_br' => false
  10. ]) : null),
  11. 'content' => ($photo_contents[$photo_id] ? cmsEventsManager::hook('html_filter', [
  12. 'text' => $photo_contents[$photo_id],
  13. 'typograph_id' => $this->options['typograph_id'],
  14. 'is_auto_br' => !$editor_params['editor'] ? true : null
  15. ]) : null),
  16. 'is_private' => (isset($photo_is_privates[$photo_id]) ? (int) $photo_is_privates[$photo_id] : 0),
  17. 'type' => (isset($photo_types[$photo_id]) ? (int) $photo_types[$photo_id] : null),
  18. тут
  19. 'ordering' => $last_order
  20. ];


вместо «тут» вставить

  1. 'address' => (isset($photo_addresses[$photo_id]) ? trim($photo_addresses[$photo_id]) : null),
  2. 'address_url' => (isset($photo_address_urls[$photo_id]) ? trim($photo_address_urls[$photo_id]) : null),

после строк

  1. $result['id'] = $this->model->addPhoto([
  2. 'album_id' => $this->album['id'],
  3. 'user_id' => $this->cms_user->id,
  4. 'image' => $result['paths'],
  5. 'date_photo' => $date_photo,
  6. 'camera' => $camera,

добавить:

  1. 'address' => null,
  2. 'address_url' => null,


в файле templates/default/controllers/photos/widget.tpl.php
после блока

  1. <?php if($types){ ?>
  2. <div class="photo_type">
  3. <?php echo html_select('type['.$photo['id'].']', $types, $photo['type']); ?>
  4. </div>
  5. <?php } ?>

вставить

  1. <div class="photo_address">
  2. <?php echo html_input('text', 'address['.$photo['id'].']', (isset($photo['address']) ? $photo['address'] : ''), array('placeholder' => LANG_PHOTOS_ADDRESS, 'maxlength' => 500)); ?>
  3. </div>
  4. <div class="photo_address_url">
  5. <?php echo html_input('text', 'address_url['.$photo['id'].']', (isset($photo['address_url']) ? $photo['address_url'] : ''), array('placeholder' => LANG_PHOTOS_VIEW_ON_MAP, 'maxlength' => 1000)); ?>
  6. </div>


и для modern в templates/modern/controllers/photos/widget.tpl.php

  1. <?php if($types){ ?>
  2. <div class="photo_type form-group">
  3. <?php echo html_select('type['.$photo['id'].']', $types, $photo['type']); ?>
  4. </div>
  5. <?php } ?>


вставить

  1. <div class="photo_address form-group">
  2. <?php echo html_input('text', 'address['.$photo['id'].']', (isset($photo['address']) ? $photo['address'] : ''), array('placeholder' => LANG_PHOTOS_ADDRESS, 'maxlength' => 500, 'class' => 'form-control')); ?>
  3. </div>
  4. <div class="photo_address_url form-group">
  5. <?php echo html_input('text', 'address_url['.$photo['id'].']', (isset($photo['address_url']) ? $photo['address_url'] : ''), array('placeholder' => LANG_PHOTOS_VIEW_ON_MAP, 'maxlength' => 1000, 'class' => 'form-control')); ?>
  6. </div>

после, в блоке <div class=«preview_template block row» style=«display:none»>

  1. <div class="form-group photo_content">
  2. <textarea id="" class="textarea form-control" name=""></textarea>
  3. </div>
  4. <div class="form-group photo_privacy">
  5. <?php echo html_select('', array(LANG_PRIVACY_PUBLIC, LANG_PRIVACY_PRIVATE, LANG_PHOTOS_ACCESS_BY_LINK), (isset($album['is_private']) ? $album['is_private'] : 0)); ?>
  6. </div>
  7. <?php if($types){ ?>
  8. <div class="form-group photo_type">
  9. <?php echo html_select('', $types); ?>
  10. </div>
  11. <?php } ?>

добавить

  1. <div class="form-group photo_address">
  2. <?php echo html_input('text', '', '', array('placeholder' => LANG_PHOTOS_ADDRESS, 'maxlength' => 500, 'class' => 'form-control')); ?>
  3. </div>
  4. <div class="form-group photo_address_url">
  5. <?php echo html_input('text', '', '', array('placeholder' => LANG_PHOTOS_VIEW_ON_MAP, 'maxlength' => 1000, 'class' => 'form-control')); ?>
  6. </div>


в файл templates/default/controllers/photos/view.tpl.php после

  1. <dl class="photo_details">

вставить

  1. <?php if (!empty($photo['address']) || !empty($photo['address_url'])) { ?>
  2. <div class="photo-address">
  3. <h3><?php echo LANG_PHOTOS_ADDRESS; ?></h3>
  4. <?php if (!empty($photo['address'])) { ?>
  5. <p><?php echo html($photo['address']); ?></p>
  6. <?php } ?>
  7. <?php if (!empty($photo['address_url'])) { ?>
  8. <p><a href="<?php echo html($photo['address_url']); ?>" target="_blank" rel="noopener"><?php echo LANG_PHOTOS_VIEW_ON_MAP; ?></a></p>
  9. <?php } ?>
  10. </div>
  11. <?php } ?>


в файл templates/modern/controllers/photos/view.tpl.php, после

  1. <dl class="photo_details bg-light border-top px-3 pb-3">

вставить

  1. <?php if (!empty($photo['address']) || !empty($photo['address_url'])) { ?>
  2. <div class="photo-address bg-light px-3 pt-3 pb-2">
  3. <h5><?php echo LANG_PHOTOS_ADDRESS; ?></h5>
  4. <?php if (!empty($photo['address'])) { ?>
  5. <p class="mb-1"><?php echo html($photo['address']); ?></p>
  6. <?php } ?>
  7. <?php if (!empty($photo['address_url'])) { ?>
  8. <p class="mb-0"><a href="<?php echo html($photo['address_url']); ?>" target="_blank" rel="noopener"><?php echo LANG_PHOTOS_VIEW_ON_MAP; ?></a></p>
  9. <?php } ?>
  10. </div>
  11. <?php } ?>


в файл system/languages/ru/controllers/photos/photos.php

  1. define('LANG_PHOTOS_SORT_ORDERTO', 'Направление сортировки');

вставить

  1. define('LANG_PHOTOS_ADDRESS', 'Местоположение');
  2. define('LANG_PHOTOS_VIEW_ON_MAP', 'Посмотреть на карте');


в файлы templates/default/js/photos.js и templates/modern/js/photos.js

после 

  1. $('.photo_type select', preview_block).attr('name', 'type['+result.id+']');

вставить

  1. $('.photo_address input', preview_block).attr('name', 'address['+result.id+']');
  2. $('.photo_address_url input', preview_block).attr('name', 'address_url['+result.id+']');


могу скинуть патчем если гит на проекте есть)

#6 29 января 2026 в 22:47

Ну пипец… вы бы уж тогда компонент новый написали вместо photos. 

#7 30 января 2026 в 01:05

ideasdigger 😄🥳 +++

#8 30 января 2026 в 09:17
Ну пипец… вы бы уж тогда компонент новый написали вместо photos. 
Lora

а не помешал бы, фотоальбом вообще никакой

#9 30 января 2026 в 10:17

а не помешал бы, фотоальбом вообще никакой

TOPg

А какой хотели бы? Создайте тему, соберите хотелки. Может кто и реализует.

#10 31 января 2026 в 08:46
Подскажите пожалуйста, как здесь можно добавить поле — например, для строковое для описания адреса или поле для вставки ссылки RUSLEGIONER всё это актуально для instantcns 2.
ideasdigger

Ох, спасибо! Какая работа огромная проведена!

Если можно скинуть — скиньте, переживаю что при редактировании боюсь где-то сделать ошибку.

#11 2 февраля 2026 в 11:16
а не помешал бы, фотоальбом вообще никакой TOPg А какой хотели бы? Создайте тему, соберите хотелки. Может кто и реализует.
Lora

вот идеальный пример, нормального фотоальбома foto.mos.ru/photo

#12 2 февраля 2026 в 11:39
а не помешал бы, фотоальбом вообще никакой TOPg А какой хотели бы? Создайте тему, соберите хотелки. Может кто и реализует.Lora вот идеальный пример, нормального фотоальбома foto.mos.ru/photo
TOPg

Определенно можно брать за эталон как список вывода фотоальбомов, так и вывод фото в фотоальбоме, так и вывод фото на отдельной странице:)

#13 2 февраля 2026 в 11:48

 TOPg, отличия в функционале практически нет. Единственное, что заметил, это возможность скачивать и делиться фото из списка. А остальное тоже самое. Стили другие. Слайдер другой. Так это дело индивидуальное. У кого какой шаблон. Кому что нравится.

#14 2 февраля 2026 в 12:17
 TOPg, отличия в функционале практически нет. Единственное, что заметил, это возможность скачивать и делиться фото из списка. А остальное тоже самое. Стили другие. Слайдер другой.
Lora

таки да, нормальные стили и нормальный слайдер

#15 2 февраля 2026 в 23:37

эталон как список вывода фотоальбомов, так и вывод фото в фотоальбоме, так и вывод фото на отдельной странице:)

Def

То что вы описали это LightGallery. 

Как то так? 

TOPg Ваш пример альбома, сдох.

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

Похожие темы

Главная фотография

Разработка дополнений Создана 1 год назад 5 сообщений

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.