Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Vault34

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Edited by Vault34

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Содержимое шаблона "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 );
								}
							}
						}
					);
},

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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 (если не ошибаюсь)

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

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

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites

яваскрипт который обращается к функциям в - /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)

Share this post


Link to post
Share on other sites

Ошибаюсь.

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

 

В файле 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 );
}

Share this post


Link to post
Share on other sites

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

ОК.

+ шаблон show_image

 

Строчку

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

 

Меняем на:

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...