Подскажите пожалуйста, как здесь можно добавить поле — например, для строковое для описания адреса или поле для вставки ссылки
всё это актуально для instantcns 2.18, в других версиях может отличаться но смысл, будет понятен, обновление затрёт
sql в бд
ALTER TABLE `cms_photos`
ADD COLUMN `address` VARCHAR(500) DEFAULT NULL COMMENT 'Адрес/местоположение съемки' AFTER `camera`,
ADD COLUMN `address_url` VARCHAR(1000) DEFAULT NULL COMMENT 'URL ссылка на карту/адрес' AFTER `address`,
ADD KEY `address` (`address`(255));
в файле system/controllers/photos/actions/edit.php после
$photo_types = $this->request->get('type', []);
вставить
$photo_addresses = $this->request->get('address', []);
$photo_address_urls = $this->request->get('address_url', []);
далее, в этом же файле
$_photo = [
'content_source' => (...),
'content' => (...),
'is_private' => (isset($photo_is_privates[$photo_id]) ?
... : 0), 'type' => (isset($photo_types[$photo_id]) ?
(int
) $photo_types[$photo_id] : null), тут
];
вместо «тут» добавить
'address' => (isset($photo_addresses[$photo_id]) ?
trim($photo_addresses[$photo_id]) : null), 'address_url' => (isset($photo_address_urls[$photo_id]) ?
trim($photo_address_urls[$photo_id]) : null)
в файле system/controllers/photos/actions/upload.php
после
if (!empty($this->options['types'])) { $photo_types = $this->request->get('type', []);
}
вставить
$photo_addresses = $this->request->get('address', []);
$photo_address_urls = $this->request->get('address_url', []);
и ниже
$_photo = [
'date_pub' => null,
'album_id' => $this->album['id'],
'title' => strip_tags($photo_titles[$photo_id] ?
$photo_titles[$photo_id] : sprintf(LANG_PHOTOS_PHOTO_UNTITLED
, $photo_id)), 'content_source' => ($photo_contents[$photo_id] ? cmsEventsManager::hook('html_filter', [
'text' => $photo_contents[$photo_id],
'is_process_callback' => false,
'typograph_id' => $this->options['typograph_id'],
'is_auto_br' => false
]) : null),
'content' => ($photo_contents[$photo_id] ? cmsEventsManager::hook('html_filter', [
'text' => $photo_contents[$photo_id],
'typograph_id' => $this->options['typograph_id'],
'is_auto_br' => !$editor_params['editor'] ? true : null
]) : null),
'is_private' => (isset($photo_is_privates[$photo_id]) ?
(int
) $photo_is_privates[$photo_id] : 0), 'type' => (isset($photo_types[$photo_id]) ?
(int
) $photo_types[$photo_id] : null), тут
'ordering' => $last_order
];
вместо «тут» вставить
'address' => (isset($photo_addresses[$photo_id]) ?
trim($photo_addresses[$photo_id]) : null), 'address_url' => (isset($photo_address_urls[$photo_id]) ?
trim($photo_address_urls[$photo_id]) : null),
после строк
$result['id'] = $this->model->addPhoto([
'album_id' => $this->album['id'],
'user_id' => $this->cms_user->id,
'image' => $result['paths'],
'date_photo' => $date_photo,
'camera' => $camera,
добавить:
'address' => null,
'address_url' => null,
в файле templates/default/controllers/photos/widget.tpl.php
после блока
<?php if($types){ ?>
<div class="photo_type">
<?php echo html_select('type['.$photo['id'].']', $types, $photo['type']); ?>
</div>
<?php } ?>
вставить
<div class="photo_address">
<?php echo html_input('text', 'address['.$photo['id'].']', (isset($photo['address']) ? $photo['address'] : ''), array('placeholder' => LANG_PHOTOS_ADDRESS, 'maxlength' => 500)); ?>
</div>
<div class="photo_address_url">
<?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)); ?>
</div>
и для modern в templates/modern/controllers/photos/widget.tpl.php
<?php if($types){ ?>
<div class="photo_type form-group">
<?php echo html_select('type['.$photo['id'].']', $types, $photo['type']); ?>
</div>
<?php } ?>
вставить
<div class="photo_address form-group">
<?php echo html_input('text', 'address['.$photo['id'].']', (isset($photo['address']) ? $photo['address'] : ''), array('placeholder' => LANG_PHOTOS_ADDRESS, 'maxlength' => 500, 'class' => 'form-control')); ?>
</div>
<div class="photo_address_url form-group">
<?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')); ?>
</div>
после, в блоке <div class=«preview_template block row» style=«display:none»>
<div class="form-group photo_content">
<textarea id="" class="textarea form-control" name=""></textarea>
</div>
<div class="form-group photo_privacy">
<?php echo html_select('', array(LANG_PRIVACY_PUBLIC, LANG_PRIVACY_PRIVATE, LANG_PHOTOS_ACCESS_BY_LINK), (isset($album['is_private']) ? $album['is_private'] : 0)); ?>
</div>
<?php if($types){ ?>
<div class="form-group photo_type">
<?php echo html_select('', $types); ?>
</div>
<?php } ?>
добавить
<div class="form-group photo_address">
<?php echo html_input('text', '', '', array('placeholder' => LANG_PHOTOS_ADDRESS, 'maxlength' => 500, 'class' => 'form-control')); ?>
</div>
<div class="form-group photo_address_url">
<?php echo html_input('text', '', '', array('placeholder' => LANG_PHOTOS_VIEW_ON_MAP, 'maxlength' => 1000, 'class' => 'form-control')); ?>
</div>
в файл templates/default/controllers/photos/view.tpl.php после
<dl class="photo_details">
вставить
<?php if (!empty($photo['address']) || !empty($photo['address_url'])) { ?>
<div class="photo-address">
<h3><?php echo LANG_PHOTOS_ADDRESS; ?></h3>
<?php if (!empty($photo['address'])) { ?>
<p><?php echo html($photo['address']); ?></p>
<?php } ?>
<?php if (!empty($photo['address_url'])) { ?>
<p><a href="<?php echo html($photo['address_url']); ?>" target="_blank" rel="noopener"><?php echo LANG_PHOTOS_VIEW_ON_MAP; ?></a></p>
<?php } ?>
</div>
<?php } ?>
в файл templates/modern/controllers/photos/view.tpl.php, после
<dl class="photo_details bg-light border-top px-3 pb-3">
вставить
<?php if (!empty($photo['address']) || !empty($photo['address_url'])) { ?>
<div class="photo-address bg-light px-3 pt-3 pb-2">
<h5><?php echo LANG_PHOTOS_ADDRESS; ?></h5>
<?php if (!empty($photo['address'])) { ?>
<p class="mb-1"><?php echo html($photo['address']); ?></p>
<?php } ?>
<?php if (!empty($photo['address_url'])) { ?>
<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>
<?php } ?>
</div>
<?php } ?>
в файл system/languages/ru/controllers/photos/photos.php
define('LANG_PHOTOS_SORT_ORDERTO', 'Направление сортировки');
вставить
define('LANG_PHOTOS_ADDRESS', 'Местоположение');
define('LANG_PHOTOS_VIEW_ON_MAP', 'Посмотреть на карте');
в файлы templates/default/js/photos.js и templates/modern/js/photos.js
после
$('.photo_type select', preview_block).attr('name', 'type['+result.id+']');
вставить
$('.photo_address input', preview_block).attr('name', 'address['+result.id+']');
$('.photo_address_url input', preview_block).attr('name', 'address_url['+result.id+']');
могу скинуть патчем если гит на проекте есть)