Перейти к публикации

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


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

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

Изменено пользователем germanydletest
Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

Не, вы не поняли, то что он придуман для того что бы самому его оформлять это понятно, вот код из 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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, celsoft сказал:

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

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

Изменено пользователем germanydletest
Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, germanydletest сказал:

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах
44 минуты назад, germanydletest сказал:

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

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

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

Изменено пользователем webair
Ссылка на сообщение
Поделиться на других сайтах
19 минут назад, webair сказал:

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, germanydletest сказал:

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

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

Ссылка на сообщение
Поделиться на других сайтах
14 часа назад, germanydletest сказал:

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

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

Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, webair сказал:

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

всё ещё жду

Ссылка на сообщение
Поделиться на других сайтах
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ы

 

Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, webair сказал:

В /engine/inс/addnews.php

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

 

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

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

 

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

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

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, celsoft сказал:

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

 

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

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

 

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

Изменено пользователем webair
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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