CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
germanydletest

Баг при использовании тега [xfinput_X] в addnews.tpl

Recommended Posts

Сегодня обнаружил баг при использовании тега [xfinput_X] в addnews.tpl, само поле выводится в нужном месте, а "label" (название) данного поля выводится в теге {xfields} (где все остальные поля). Версия 11.1 тип поля галерея изображений.

Edited by germanydletest

Share this post


Link to post
Share on other sites

Теги {xfields} и [xfinput_X] абсолютно независимые теги. Тег [xfinput_X] выводит только поле редактирования. а все остальное пишется для него уже в шаблоне самостоятельно. Он для этого и предназначен, чтобы сделать свое собственное оформление добавления новости. А тег {xfields} для простого универсального вывода всех полей, где все уже оформлено в определенном порядке и с определенным форматированием кода.

Share this post


Link to post
Share on other sites

Не, вы не поняли, то что он придуман для того что бы самому его оформлять это понятно, вот код из addnews 

<article class="block story">
	<h1 class="title h2">Добавить новость</h1>
	<ul class="ui-form">
		<li class="form-group imp">
			<label for="title">Заголовок</label>
			<input type="text" name="title" id="title" value="{title}" class="wide" required>
		</li>
		<li><label for="title">галерея изображений</label>[xfinput_img]</li>
		[urltag]
		<li class="form-group imp">
			<label for="alt_name">URL новости</label>
			<input type="text" name="alt_name" id="alt_name" value="{alt-name}" class="wide">
		</li>
		[/urltag]
		<li class="form-group imp">
			<label for="category">Категория</label>
			{category}
		</li>
		<li class="form-group">
			<label><a href="#" onclick="$('.addvote').toggle();return false;"><span class="plus_icon circle"><span>+</span></span> Добавить Опрос</a></label>
		</li>
		<li class="form-group addvote" style="display:none;">
			<label for="vote_title" >Заголовок опроса</label>
			<input type="text" name="vote_title" value="{votetitle}" class="wide" />
		</li>
		<li class="form-group addvote" style="display:none;">
			<label for="frage" >Вопрос</label>
			<input type="text" name="frage" value="{frage}" class="wide" />
		</li>
		<li class="form-group addvote" style="display:none;">
			<label for="vote_body" >Список ответов</label>
			<textarea name="vote_body" rows="5" class="wide" placeholder="Каждая новая строка является новым вариантом ответа">{votebody}</textarea><br /><input type="checkbox" name="allow_m_vote" value="1" {allowmvote}> Разрешить выбор нескольких вариантов
		</li>
		<li class="form-group imp">
			<label for="short_story">Краткое описание</label>
			[not-wysywyg]
			<div class="bb-editor">
				{bbcode}
				<textarea name="short_story" id="short_story" onfocus="setFieldName(this.name)" rows="8" class="wide" required>{short-story}</textarea>
			</div>
			[/not-wysywyg]
			{shortarea}
		</li>
		<li class="form-group">
			<label for="full_story">Полное описание</label>
			[not-wysywyg]
			<div class="bb-editor">
				{bbcode}
				<textarea name="full_story" id="full_story" onfocus="setFieldName(this.name)" rows="18" class="wide" >{full-story}</textarea>
			</div>
			[/not-wysywyg]
			{fullarea}
		</li>
		<li class="form-group">
			<table style="width:100%">
				{xfields}
			</table>
		</li>
		<li class="form-group">
			<label for="alt_name">Ключевые слова</label>
			<input placeholder="Вводите через запятую" type="text" name="tags" id="tags" value="{tags}" maxlength="150" autocomplete="off" class="wide">
		</li>
	[group=1,2]
		<li class="form-group">
			<div class="admin_checkboxs">{admintag}</div>
		</li>
	[/group]
	[recaptcha]
		<li class="form-group">{recaptcha}</li>
	[/recaptcha]
	[question]
		<li class="form-group">
			<label for="question_answer">{question}</label>
			<input placeholder="Введите ответ" type="text" name="question_answer" id="question_answer" class="wide" required>
		</li>
	[/question]
	</ul>
	<p style="margin: 20px 0 0 0;" class="grey"><span style="color: #e85319">*</span> — поля отмеченные звездочкой обязательны для заполнения.</p>
	<div class="form_submit">
		[sec_code]
			<div class="c-capcha">
				{sec_code}
				<input placeholder="Повторите код" title="Введите код указанный на картинке" type="text" name="sec_code" id="sec_code" required>
			</div>
		[/sec_code]
		<button class="btn" type="submit" name="add"><b>Отправить</b></button>
		<button id="add_news_preview" class="btn" onclick="preview()" type="submit" name="nview"><b>Предпросмотр</b></button>
	</div>
</article>

галерея изображений - это и есть доп поле выведенное отдельно, в админке оно называется "галерея", теперь смотрим на тег {xfields} и видим, что название данного поля вывелось в данном теге

iy3f7i7y.png

Share this post


Link to post
Share on other sites

Я вас понял. Не может быть двух одинаковых полей в одной форме. Вы одновременно выводите одно и тоже поле в форме дважды. Это нарушение всех стандартов HTML. Вывод поля должен быть один раз в форме, а не несколько. Поэтому либо {xfields} либо [xfinput_X] нужно использовать.

Share this post


Link to post
Share on other sites
6 минут назад, celsoft сказал:

Я вас понял. Не может быть двух одинаковых полей в одной форме. Вы одновременно выводите одно и тоже поле в форме. Это нарушение всех стандартов HTML. Вывод поля должен быть один раз в форме, а не несколько. Поэтому либо {xfields} либо [xfinput_X] нужно использовать.

то есть если я хочу отделить только 1 поле от остальной массы, то мне нужно все поля выводить через [xfinput_X]?

Edited by germanydletest

Share this post


Link to post
Share on other sites
3 минуты назад, germanydletest сказал:

то есть если я хочу отделить только 1 поля от остальной массы, то мне нужно все поля выводить через [xfinput_X]?

Безусловно. Эти теги между собой независимы. Один выводит все поля без исключения, а второй только конкретное поле.

Share this post


Link to post
Share on other sites

тогда всё ещё грустнее чем я думал, поскольку настройка отображения доп. полей только при выборе определённой категории с тегом [xfinput_X] не работает, она работает только с {xfields}...

Share this post


Link to post
Share on other sites
44 минуты назад, germanydletest сказал:

тогда всё ещё грустнее чем я думал, поскольку настройка отображения доп. полей только при выборе определённой категории с тегом [xfinput_X] не работает, она работает только с {xfields}...

Ага, я делал display:none для ненужных полей, с помощью JS определяя какая категория выбрана.

Лучше так, чем никак :)

Edited by webair

Share this post


Link to post
Share on other sites
19 минут назад, webair сказал:

Ага, я делал display:none для ненужных полей, с помощью JS определяя какая категория выбрана.

Лучше так, чем никак :)

кодом не поделишься?

Share this post


Link to post
Share on other sites
1 час назад, germanydletest сказал:

кодом не поделишься?

Через пару часов, когда до домашнего компьютера доберусь

Share this post


Link to post
Share on other sites
14 часа назад, germanydletest сказал:

тогда всё ещё грустнее чем я думал, поскольку настройка отображения доп. полей только при выборе определённой категории с тегом [xfinput_X] не работает, она работает только с {xfields}...

Добавляйте для блока который нужно скрывать id="xfield_holder_X" где X имя поля, и все будет скрываться и показываться. тег [xfinput_X] исключительно для ручного вывода оформления полей. Всю структуру нужно прописывать вручную. Он для этого и нужен. А пример сруктуры вы можете посмотреть из тега {xfields} который и выводит все автоматом.

Share this post


Link to post
Share on other sites
12 часа назад, webair сказал:

Через пару часов, когда до домашнего компьютера доберусь

всё ещё жду

Share this post


Link to post
Share on other sites
function GetSelectElem()
{
  // получаем индекс выбранного элемента
  var selectid = document.getElementById("category").options.selectedIndex;
  // selectval будет соответствовать id категории
  var selectval= document.getElementById("category").options[selectid].value;
  if (selectval == 1){ "display:block или show() нужного элемента" } else { "display:none или hide() нужного элемента" }
  if (selectval == 2){ "display:block или show() нужного элемента" } else { "display:none или hide() нужного элемента" } 
}

В /engine/inс/addnews.php найти onchange="onCategoryChange(this)" заменить на onchange="GetSelectElem()"

 

Я группировал inputы в divы и скрывал/раскрывал соответствующие divы

 

  • Upvote 1

Share this post


Link to post
Share on other sites
20 минут назад, webair сказал:

В /engine/inс/addnews.php

Это файл админпанели, к добавлению на сайте и к шаблонам отношения не имеет.

 

21 минуту назад, webair сказал:

найти onchange="onCategoryChange(this)" заменить на onchange="GetSelectElem()"

 

Я группировал inputы в divы и скрывал/раскрывал соответствующие divы

Зачем править вообще скрипты? Выше я указал какой ID нужно указывать в шаблоне для блока элементов который нужно скрывать или показывать при выборе категорий.

Share this post


Link to post
Share on other sites
1 час назад, celsoft сказал:

Это файл админпанели, к добавлению на сайте и к шаблонам отношения не имеет.

 

Зачем править вообще скрипты? Выше я указал какой ID нужно указывать в шаблоне для блока элементов который нужно скрывать или показывать при выборе категорий.

Да, спутал. Нужно конечно же файл добавления с сайта, а не с админпанели.

 

На счет скриптов... Ну не знаю, кому как удобно. Я кастомизировал еще глубже, поэтому мне надо было править JS скрипты (автоматический выбор категории при переходе по ссылке типа /addnews.html?cat=1 и т.д.). germanydletest попросил поделиться, я поделился своими наработками :)

Edited by webair

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this