Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

IP.Gallery 4.0.4, IP.Board 3. "Редактировать" фото в галерее путем GUI - как добавить новое поле?

Опубликовано:

При нажатии кнопки "Редактировать" в профиле изображения появляется окошко, в котором есть возможность изменить его (изображения) название и описание. Нужно также добавить поля для изменения авторских прав (обязательно) и даты (желательно). Опыт html и css есть, а вот php - увы. Прошу помощи.

Рекомендованные сообщения

Опубликовано:
  • Автор

Дополнение: оказалось, что это скрипт на яве из файла ips.gallery.js за это отвечает. Так что изменять надо его. Ajax-реквест поменять удалось. А как добавить текстовое поле в само окошко редактирования?

Изменено пользователем Vault34

Опубликовано:

Стандартными средствами никак. Попробуйте на форуме IPS с Бфарбером на эту тему поговорить...

Опубликовано:
  • Автор

Итак, разобрался дальше. Но оно все еще почему-то не работает.

 

Содержимое шаблона "editDialogue":

<h3>Edit</h3>
<div class='general_box'>
<fieldset>
	<ul>
		<li class='field' style='margin-left:0px'>
			{$this->lang->words['title_ucfirst']}<br />
			<input type="text" style='width:99%' name="caption" id="form_caption" class="input_text" value="{$image['caption']}" />
		</li>
		<li class='field' style='margin-left:0px'>
			{$this->lang->words['description_ucfirst']}<br />
			{parse template="editorShell" group="editors" params="'description', 'description', $image['description'], 1, 1"}
			<script type="text/javascript">
				ipb.editors['description'] = new ipb.editor( 'description', USE_RTE );
				$('editor_description').setStyle( { 'margin': '0px' } );
			</script>
		</li>
		<li class='field' style='margin-left:0px'>
			{$this->lang->words['copyright_ucfirst']}<br />
			<input type="text" style='width:99%' name="copyright" id="form_copyright" class="input_text" value="{$image['copyright']}" />
		</li>
		<li class="submit" style="float:right">
			<input type="submit" value="{$this->lang->words['save_ucfirst']}" class="input_submit _edsubmit" />
		</li>
	</ul>
</fieldset>
</div>

 

В файле ips.gallery.js функция imageEditSave выглядит вот так:

 

imageEditSave: function(e)
{
	var _url  = ipb.vars['base_url'] + '&app=gallery&module=ajax&section=image&do=editSave&secure_key=' + ipb.vars['secure_hash'] + '&imageid=' + ipb.gallery.imageID;
	Debug.write( _url );

	ipb.editors['description'].update_for_form_submit();

	var description = $F('description_textarea');
	var caption     = $F('form_caption');
	var copyright	= $F('form_copyright');

	new Ajax.Request( _url,
						{
							method: 'post',
							evalJSON: 'force',
							parameters: { 'caption'     : caption,
									      'description' : description.encodeParam(),
										  'copyright'	: copyright },
							onSuccess: function(t)
							{
								/* No Permission */
								if ( t.responseJSON )
								{
									ipb.gallery.popups['edit'].hide();

									$('gallery_caption').update( t.responseJSON['caption'] );
									$('gallery_description').update( t.responseJSON['description'] );
									$('gallery_copyright').update( t.responseJSON['copyright'] );
								}
								else if ( t.responseText )
								{
									alert( ipb.lang[ t.responseText ] ? ipb.lang[ t.responseText ] : t.responseText );
								}
							}
						}
					);
},

 

Но при изменении, производимом в окошке редактирования, изменяются опять же только описание и название. Авторские права не меняются.

Опубликовано:
  • Автор

Авторские права отображаются как надо. При прямом изменении их значения в MySQL отображаются новые, измененные авторские права. Но лезть туда каждый раз - дело хитрое.

Опубликовано:
  • Автор

Стандартными средствами никак. Попробуйте на форуме IPS с Бфарбером на эту тему поговорить...

 

А Вы не могли бы дать ссылку?

Опубликовано:

А Вы не могли бы дать ссылку?

IP.Gallery

 

 

 

 

Коротко. Я сегодня не знаю за что хватается ....

 

При прямом изменении их значения в MySQL отображаются новые, измененные авторские права

Еще бы.

 

Но лезть туда каждый раз - дело хитрое.

За 6 лет работы форума не разу не попросили поменять авторские права.

 

IP.Gallery 4.0.4, IP.Board 3.

4.0.4 - настолько сырая вещь, что серьезно не смотрел. Так поверхностно, поэтому могу ошибиться.

А уж менять функционал....

 

В настройках старой галереи, были пункты.

Allow users to set own copyright information?

Default Copyright

А сейчас их нет. А в коде я видел проверки. Поэтому серьезно смотреть, что за что отвечает, совсем не хочется.

 

Дополнение: оказалось, что это скрипт на яве из файла ips.gallery.js за это отвечает.

яваскрипт который обращается к функциям в - /admin/applications_addon/ips/gallery/modules_public/ajax/image.php (если не ошибаюсь)

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

То есть надо дописывать свою функцию. :(

Опубликовано:
parameters: { 'caption' : caption,

'description' : description.encodeParam(),

'copyright' : copyright },

&app=gallery&module=ajax&section=image&do=editSave&secure_key=

 

ну дык вы только отправляйте ajax запрос к скрипту, а дальше данные в базу не записываются. Нужно найти в файлах галереи функцию editSave, и там где заносятся переменные обновления добавить свою

 

$copyright = $this->request['copyright'];

...

всякие проверки на xss;

...

$this->DB->update( 'table', array( 'copyright' => $copyright...

Опубликовано:

яваскрипт который обращается к функциям в - /admin/applications_addon/ips/gallery/modules_public/ajax/image.php (если не ошибаюсь)

Ошибаюсь.

 

Нужно найти в файлах галереи функцию editSave

Вы правы. Запись значения, идет здесь:

 

admin/applications_addon/ips/gallery/sources/classes/gallery/moderate.php

public function editSave( $imageId, $caption, $description)

Опубликовано:

Ошибаюсь.

Не совсем. Но прежде чем писать, буду думать...

 

В файле ips.gallery.js функция imageEditSave выглядит вот так:

imageEditSave: function(e)
{
	var _url  = ipb.vars['base_url'] + '&app=gallery&module=ajax§ion=image&do=editSave&secure_key=' + ipb.vars['secure_hash'] + '&imageid=' + ipb.gallery.imageID;
	Debug.write( _url );

	ipb.editors['description'].update_for_form_submit();

	var description = $F('description_textarea');
	var caption     = $F('form_caption');
	var copyright   = $F('form_copyright');

	new Ajax.Request( _url,
						{
							method: 'post',
							evalJSON: 'force',
							parameters: { 'caption'     : caption,
									      'description' : description.encodeParam(),
										  'copyright'     : copyright },
							onSuccess: function(t)
							{										    	
								/* No Permission */
								if ( t.responseText == 'nopermission' )
								{
									alert( ipb.lang['no_permission'] );
								}
								else if ( t.responseJSON )
								{
									ipb.gallery.popups['edit'].hide();

									$('gallery_caption').update( t.responseJSON['caption'] );
									$('gallery_description').update( t.responseJSON['description'] );
									$('gallery_copyright').update( t.responseJSON['copyright'] );
								}
							}
						}						
					);	
},

 

admin/applications_addon/ips/gallery/sources/classes/gallery/moderate.php

public function editSave( $imageId, $caption, $description, $copyright )
{
	/* init */
	$image = $this->registry->gallery->helper('image')->fetchImage( intval( $imageId ) );

	if ( empty( $image['id'] ) )
	{
		return false;
	}

	if ( ! $this->_albums->canModerate( $image['img_album_id'] ) AND ( $image['member_id'] != $this->memberData['member_id'] ) )
	{ 
		return false;
	}

	/* Format description */
	IPSText::getTextClass('bbcode')->parse_html			= 0;
	IPSText::getTextClass('bbcode')->parse_nl2br		= 1;
	IPSText::getTextClass('bbcode')->parse_smilies		= 1;
	IPSText::getTextClass('bbcode')->parse_bbcode		= 1;
	IPSText::getTextClass('bbcode')->parsing_section    = 'gallery';

	$description = IPSText::getTextClass( 'editor' )->processRawPost( $description );
	$description = IPSText::getTextClass( 'bbcode' )->preDbParse( $description );

	/* Update DB */
	$this->DB->update( 'gallery_images', array( 'caption'     => $caption,
												'caption_seo' => IPSText::makeSeoTitle( $caption ),
												'copyright'     => $copyright,
												'description' => $description ), 'id=' . $image['id'] );

	/* return it suitable for display */
	return array( 'caption'     => $caption,
				  'copyright'     => $copyright,
				  'description' => IPSText::getTextClass('bbcode')->preDisplayParse( $description ));
}

 

/admin/applications_addon/ips/gallery/modules_public/ajax/image.php

	protected function _editSave()
{
	/* init */
	$imageid     = intval( $this->request['imageid'] );
	$caption     = trim( $this->request['caption'] );
	$description = trim( IPSText::parseCleanValue( $_POST['description'] ) );
	$copyright     = trim( $this->request['copyright'] );

	/* send it packing */
	$result = $this->_moderate->editSave( $imageid, $caption, $_POST['description'], $copyright );

	/* Update deebee */
	if ( $result === false )
	{
		return $this->returnJsonError( 'no_permission' );
	}

	return $this->returnJsonArray( $result );
}

Опубликовано:

Содержимое шаблона "editDialogue":

ОК.

+ шаблон show_image

 

Строчку

<div class='desc' style='padding: 8px'>{$info['copyright']}</div>

 

Меняем на:

<div id='gallery_copyright' class='desc' style='padding: 8px'>{$info['copyright']}</div>

Опубликовано:
  • Автор

Всем спасибо огромное! Но проблему я решил еще до того, как зашел сюда. Извините уж.

 

Хотя, если подумать, Ваше решение было бы легче моего. На будущее запомню.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.