изменение порядка вывода записей

lanka

Новичок
изменение порядка вывода записей

Подскажите идею - как организовать интерфейс.

Заказчик хочет, чтобы можно было указывать порядок вывода статей - любой, который ему понравится.
Поиск дал только нерабочую ссылку
http://detail.phpclub.net/2002-05-30.htm

Идея номер раз - в интерфейсе администрирования при выводе списка статей (их не должно быть много) рядом с заголовком статьи показывать -например- выпадающий список, где будет указан номер этой статьи selected itemом. Тут вопрос- как бы покорректнее организовать то, чтобы при смене номеров при статье номера не дублировались? Не очень хочется заморачиваться с javascriptом, или сдвигать все номера изза одной вставки.

Идея номер два - отдельным пунктом в интерфейсе вызывать "порядок статей" и допустим в связанных листбоксах что-то делать? Тут мысль останавливается.

Идея номер три - для каждой статьи давать возможность продвинуть ее на первое место с последующим сдвигом всех остальных. Но это уже совсем глупость получается.

ps код приводить не надо, достаточно только идей.
 

Фанат

oncle terrible
Команда форума
отнюдь не глупость.
перенумеровать-то можно одним запросом rank=rank+1
 

Demiurg

Guest
в базе надо хранить отдельно поле по которому будет происходить сортировка. Как реалиховать интерфейс для изменения этого поля - это уже каждый сам решает. Я например, заставляю прописывать числа вручную. Можно сделать стрелочки вверх/вниз. Изменения порядка операция не частая, так что производимость роли не играет.
 

lanka

Новичок
Фанат
глупость не в смысле реализации, это-то легко и запросто, но просто "жопой чую" что не понравится клиенту. мне нравится первый путь.. но там заморачиваться надо..

Demiurg
я понимаю что поле и отдельно, чай не первый год замужем
мне как раз идеи про интерфейс и надо - со стрелочками просто замморачиваться еще печальнее, чем с селектами.

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

HEm

Сетевой бобер
lanka
присмотрись, как это делается в обычных Windows-программах, беременная девочка если и поймет что-либо в этом духе то только такое
 

Demiurg

Guest
со стрелочками все делается в 2 запроса. И интерфейс интуитивный.
 

StUV

Rotaredom
а если вариант со стрелочками, но еще и поле на сколько позиций ниже/выше ?

+ добавить возможность не по одному изменению делать, а для нескольких статей выбрать параметры и одним сабмитом на сервер
 

nRay

Guest
>> Не очень хочется заморачиваться с javascriptом

У себя эту задачу решил именно яваскриптом:
Одна ссылка, при нажатии открывается "WebDialog" в нём мультипал селект со всем списком и пара кнопок "вверх", "вниз"
можно поднимать/опускать как один айтем так и несколько сразу, далее - кнопка "применить".
Кстати, яваскрипт там совсем простенький.
 

nRay

Guest
это во внутреннем админском интерфейсе, впрочем, счас попробую.
 

lanka

Новичок
nRay
однако классная идея!
и так навскидку весьма простая в реализации

(впрочем если покажете, то сразу еще одно спасибо)
 

HEm

Сетевой бобер
nRay
достаточно сохранить страничку в браузере и вырезать оформление
 

nRay

Guest
Нарезал из шаблона, на вскидку всё работает, если будут глюки пишите, может лишнего чего убрал

PHP:
<head></head>
<body>
<html>
<script language="JavaScript">
	function Up() {
		var option;
		var slct = document.forms["smfrm"].elements["item[]"];

		if ( slct.options[0].selected ) {
			return;
		}
		for (i =0; i< slct.options.length; i++) {
			if (slct.options[i].selected) {
				option = slct.options[i];
				slct.options.remove(i);
				slct.options.add(option,[i-1]);
			}
		}
	}

	function Down() {
		var option;
		var slct = document.forms["smfrm"].elements["item[]"];

		if ( slct.options[slct.options.length-1].selected ) {
			return;
		}

		for (i = slct.options.length - 1; i >= 0; i--) {
			if (slct.options[i].selected) {
				option = slct.options[i];
				slct.options.remove(i);
				slct.options.add(option,[i+1]);
			}
		}
	}

	function SelectAll() {
		var slct = document.forms["smfrm"].elements["item[]"];
		for (i =0; i < slct.options.length; i++) {
			slct.options[i].selected = true;
		}
	}
</script>
<form action="%%formaction%%" onsubmit="SelectAll();" target="main" method="post" name="smfrm"">
			<select name="item[]" onclick="return false;" multiple size="5" class="textarea" id="300">
				<option value="1">item1</option>
				<option value="2">item2</option>
				<option value="3">item3</option>
				<option value="4">item4</option>
				<option value="5">item5</option>
			</select>
<a href="#" onclick="javascript: Up(); return false" class=link>поднять вверх</a>
<a href="#" onclick="javascript: Down(); return false" class=link>опустить вниз</a>
</form>

</html>
</body>
 

camka

не самка
а я бы посоветовал Драг-н-Дроп сделать. Сложнее конечно же, однако для секретарши - самое то. Выделяешь нужную строку и перетаскиваешь куда надо. при перетаскивании можно просто подсвечивать между какими строками вставится новая строка, а можно сразу смещать все, что ниже. На событие дроп - делаешь субмит формы. ну или без субмита, сначала перетаскиваешь все, что надо, а потом Аплай. Я видел подобную штуку. Там таким образом можно было сортировать картинки в галлерее. Причем поддерживалось выделение сразу нескольких картинок в разнобой.
Согласен, что это не так легко реализовать, но уж ОЧЕНЬ удобно использовать, как раз для случая с секретаршей.
 

lanka

Новичок
Фанат
хехе кому что а голому баня ;)

nRay
в ие работает на ура.

в мозиле у меня что-то не хочет работать, и другие прочие скрипты подобного рода некорректно работают
(например этот:
http://www.faqts.com/knowledge_base/view.phtml/aid/8623/fid/178
и этот:
http://www.faqts.com/knowledge_base/view.phtml/aid/6089/fid/178
)
но, по здравом размышлении, в общем работа в мозиле и не надо, тк у девочки, конешно же, только ие, ума на передвижение options в selectах у нее вполне хватит, и вообще! этот клиент уже меня устал.

так что большое спасибо за идею :)
 
Сверху