Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Vault34

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

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

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

Поделиться сообщением


Ссылка на сообщение
06/13/11 17:46 (изменено)

Дополнение: оказалось, что это скрипт на яве из файла 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 пользователей

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

×
×
  • Создать...