Forums / National / Russian / Идеи / новый скин админки

<<<123456

Macik
#76 2012-05-30 19:49
#34469 Sergey:

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

Не могу представить реальное использование. Можете привести пример?

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
esclkm
#77 2012-05-30 20:48

то есть Sergey вы предлагаете все поля перевести в горизональ???? к каждой странице будет создаваться 5-10 дополнительных строк конфига-полей? так?

Добавлено 2 минуты спустя:

про идеи - да есть толковые - но я фанат таблиц а не текстового представления, а там же наоборот текстовое представление - это заставляет читать. -а удобно ли это?

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Sergey
#78 2012-05-31 04:49

ключевая строка из page.main.php, строки 148, 149:

$mskin = cot_tplfile(array('page', $cat['tpl']));
$t = new XTemplate($mskin);

Этот участок, подбирает правильный шаблон с учетом структурного расположения страницы. Так, для каждой категории, можно установить свой шаблон. Ясно, что в одной категории экстрополе это может быть размер монитора, а другом дата осуществления услуги. Налицо противоречие, которое можно просто избежать, если ввести похожую диллему подбора своего набора экстра полей. Каждому темплейту категории свой вариант  ввода (обработки) данных из экстрополей. 

Как это пристыкывать я не знаю.

Другая проблема это образ данных и их отображение. Поясню. Некоторые страницы можно использовать как шаблон текста. Это своеобразный темплейт, но на уровне самих страниц. В таком варианте экстрополя выступают как переменные данные. Т.е. возникает ситуация подбора таких страниц и связка их с вариантом экстрополей.  Поясняю, у вас магазин сковородок. Глупо описывать каждый раз диаметр очередной сковородки. Проще брать какое-то универсальное описание. За счет автомата подбора шаблонов, легко эту ситуацию вроде разрегулировать, но проще это сделать на самой странице - шаблоне.

www.cotonti.mobi
Macik
#79 2012-05-31 10:27
#34478 Sergey:

ключевая строка из page.main.php, строки 148, 149:

$mskin = cot_tplfile(array('page', $cat['tpl']));
$t = new XTemplate($mskin);

Этот участок, подбирает правильный шаблон с учетом структурного расположения страницы. Так, для каждой категории, можно установить свой шаблон. Ясно, что в одной категории экстрополе это может быть размер монитора, а другом дата осуществления услуги. Налицо противоречие, которое можно просто избежать, если ввести похожую диллему подбора своего набора экстра полей. Каждому темплейту категории свой вариант  ввода (обработки) данных из экстрополей. 

Тут, если я правильно понял, надо заводить соответствующее количество экстра полей для страниц, пример: razmer, data, ves. А в нужной категории в шаблоне page.cat.tpl использовать только актуальные для данной категории: {PAGE_RAZMER}, {PAGE_DATA}, {PAGE_VES}.

#34478 Sergey:

Как это пристыкывать я не знаю.

Другая проблема это образ данных и их отображение. Поясню. Некоторые страницы можно использовать как шаблон текста. Это своеобразный темплейт, но на уровне самих страниц. В таком варианте экстрополя выступают как переменные данные. Т.е. возникает ситуация подбора таких страниц и связка их с вариантом экстрополей.  Поясняю, у вас магазин сковородок. Глупо описывать каждый раз диаметр очередной сковородки. Проще брать какое-то универсальное описание. За счет автомата подбора шаблонов, легко эту ситуацию вроде разрегулировать, но проще это сделать на самой странице - шаблоне.

Все равно не понял зачем «использовать страницы как шаблон текста», если для этого и существуют непосредственно шаблоны. (Единственной причиной может быть удобство редактирования страниц через Web, перед редактированием шаблонов)

1. [Рассматриваем случай, когда нет возможности написать плагин под это дело, и обходимся только шаблонами. Т.е. то , что описано мной в первом абзаце].

Есть список товаров, разделенный по группам (пример: кастрюли, телевизоры). Каждый товар представлен собственной страницей, и хранит набор своих свойств в экстраполях: diameter - диаметр кастрюли, diagonal - диагональ экрана. Категория товара определяется том, в какой категории страниц находится товар (категории как обычно создаем через админку).  При создании страницы необходимые экстра поля заполняются. Тут даже можно создать отдельные шаблоны для создания страниц в каждой категории, тогда можно не отображать «ненужные» для данной категории поля свойств.

Далее как описано выше, для каждой категрии создаем шаблон отображения страниц, использующий только необходимые экстраполя.

 

2. Вариант когда некий шаблон вывода данных мы хотим сохранять как страницу (и редактировать через Web). Тут без небольшого плагина не обойтись (назовем его условно pagetemplate).

Входные данные и структура сайта аналогичны предыдущему примеру. Экстраполя. Структура категорий. Структура товаров - пункт 1. Создаем отдельную подкатегорию tpl в категрии «system», где будут лажеть страницы-шаблоны (в таком случае простой пользователь не будет иметь к ним доступа) - пункт 2. 

Страница шаблон будет иметь формат данных аналогичный, используемому в строковых ресурсах. Т.е. это любой текст со вставками специальных тегов (типа {$size_value}), которые будут заменены на соответствующие значения. Псевдоним (alias) страницы будет соответствовать коду категории товара (для сопоставления шаблона нужной категории). В строке ключевых слов укажем через запятую названия дополнительных полей, которые хотим использовать в данной категории, например для телевизора «ves, razmer». Иллюстрация. Готовые шаблоны для разных категорий - илл.

Плагин будет работать просто - в шаблон отображения страниц ставим тэг {PAGE_TEMPLATE} илл. (прим.: на иллюстрации шаблон из темы HTMLKickstart), который плагином будет заменяться на соотв. кусок текста взятый из страницы-шаблона (выбранной по соответствию псевдонима коду категории). Перед применением страницы-шаблона, поменяем специальные теги на значения взятые из lang файла плагина и экстраполей страницы. 
Илл. (т.о. текст взят из страницы товара, а блок добавлен в соответствии с шаблоном). В другой категории будет использован свой шаблон.

Теперь поправим шаблоны добавления и редактирования страницы, добавив одинаковый тег {PAGE_TEMPLATE_EXTRAPARAMS} илл. (Прим. на иллюстрации шаблон из темы HTMLKickstart). Делаем это, чтобы при создании страницы в определенной категории, появлялись только определенные страницей-шаблоном (помните заполняли поле «keywords») для этой категории дополнительные поля. 
Т.е. (для примера) если мы создаем (редактируем) страницу в категории «Tv», то поля дополнительных параметров будут «razmer» и «ves», если в категории «phones», то параметрами будут «ves» и «color». илл.

Пример плагина качать здесь: http://www.cotonti.com/datas/users/pagetemplate_461.7z

Он проверялся под темой «HTMLKickstart», для другой темы оформления возможно потребуется немного изменить файл tpl/pagetemplate.tpl 
Ну и конечно это «пример на скорую руку». Так что никаких гарантий. :)

 
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
This post was edited by Macik (2012-05-31 13:59, 11 years ago)
Sergey
#80 2012-05-31 13:52

Страница, как шаблон. Для этой цели я использую так называемый мной тег-процессор. Соответствующим заключительным этапом я предоставляю возможность юзеру вставлять теги в текст страницы.

формат: {{ассоциация или имя тега}возможная замена сообщения}

Для чего нужна ассоциация. Она позволяет просто написать:

Размер телевизора по диагонали {{ДИАГОНАЛЬ}}

что даст отображение:

Размер телевизора по диагонали 61см

механизм позволяет интерпритировать ассоциацию с конкретным экстраполем.

Вот и получается, что наряду с категорией надо вводить и ассоциацию.

Вот пример функции для Генуи:

function тег_процессор			//	функция процессора тегов вида {{тег}аргумент замены для тегов, которые включают HTML тег А}
								//  аргумент замены для тегов, которые включают HTML тег А =значение необязательно
								//	В том случае, если имеется указание на то, что тег содержится внутри другого тега,
								//	то тогда из тега должен быть извлечен аргумент HTML параметр hreff и зменнет аналогичным из тега
	(
	$входная_строка=FALSE,		//@param string	- обрабатываемая строка
	$тег_в_якоре=FALSE,
	$tags
	)
{
global $cfg;

if	(empty($входная_строка)) return $входная_строка;

$голова='';
$тело=$входная_строка;

while(TRUE)
	{
	$найден_тег=FALSE;
	$это_меняем=FALSE;
	$это_заменяем=FALSE;
	$часть=preg_split('/\\{\\{\\s*([a-zA-Z0-9_'.$cfg['alpha_national'].']*)(\\})/ui', $тело,2,PREG_SPLIT_DELIM_CAPTURE); 
 	if	(count($часть) == 4)
		{
		$голова.=$часть[0];
		$найден_тег=$часть[1];
		$тело=$часть[3];
		$аргумент_замены=preg_split('/(\\})/ui', $тело,2,PREG_SPLIT_DELIM_CAPTURE);
		if	(count($аргумент_замены) != 3) break;
		$тело=$аргумент_замены[2];
		if	(empty($найден_тег) or !isset($tags->vars[$найден_тег]))
			{
			$голова .="{?{".$найден_тег."}?}";
			continue;
			}
        $найден_тег=$tags->vars[$найден_тег];
		$это_меняем=TRUE;
		if	(!$тег_в_якоре)
			{
			$ищем_якорь_в=$найден_тег;
			$это_заменяем=$часть[0];
			while(TRUE)
				{
				$порция=preg_split('/a\\s*(href)*\\s*\\=/ui', $ищем_якорь_в,2,PREG_SPLIT_DELIM_CAPTURE);
    			if	(count($порция) == 3)
					{
					if	(empty($порция[2])) break;
					    else $ищем_якорь_в=$порция[2];
					}
               	else	{$это_заменяем=FALSE; break;}
               	}
			}
		else if (!empty($аргумент_замены[0]))
				{
				$порция=preg_split('/(\>)/ui', $найден_тег,2,PREG_SPLIT_DELIM_CAPTURE);
                if  (count($порция) == 3)
                    {
                    $замена=preg_split('/(<\\/a|A>)/ui', $порция[2],2,PREG_SPLIT_DELIM_CAPTURE);
                    $найден_тег=$порция[0].'>'.$аргумент_замены[0].'</A>';
                    }
				}
        if	($это_меняем)
        	{
         	$голова .= $найден_тег;
        	}
		}
     	else break;
return $голова.$тело;
}
www.cotonti.mobi
This post was edited by Sergey (2012-05-31 14:11, 11 years ago)
Macik
#81 2012-05-31 14:08
#34482 Sergey:

Вот и получается, что наряду с категорией надо вводить и ассоциацию.

Все равно не понимаю зачем. В вашем случае можно заменить: {{ДИАГОНАЛЬ}} на {{PAGE_DIAGONAL}}, что четко укажет на конкретное экстраполе.

 

з.ы. Добавил иллюстраций и пояснений в предыдущий пост. 

p.p.s. Какой-нибудь из двух описанных мной вариантов соответствует вашему примеру?
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Sergey
#82 2012-05-31 14:18

Мне надо переварить ваше добавление.

Вы правильно поняли суть тег-процессора. Так он сейчас и работает, но у нас одна общая таблица для всех случаев ресурса, поэтому ассоциация необходима для данной категории, а имя экстраполя, это пусть для программиста.

Добавлено 1 день спустя:

Переварил. По большому счету тег-процессор можно оформить для Сиены в плагин. Что касаемо асслциации и прочего связанного с категориями, это плагин. В минимальном варианте работает. Однако, должно вылежатся (отлежатся). Имеется большая  перспектива этого направления. Нужно думать.

www.cotonti.mobi
This post was edited by Sergey (2012-06-01 16:00, 11 years ago)

<<<123456