Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2009-04-24 01:25:06

EsCaPeR
Участник
Зарегистрирован: 2008-10-17
Сообщений: 71
Рейтинг :   

Выбор категории при добавлении новости (addnews.htm)

77b88288ebae7b17b7c8610a48c40dd1_pv.png

Реально ли такое сделать?

Не в сети

#2 2009-04-24 01:43:13

d7p4x
Модератор
Зарегистрирован: 2008-10-13
Сообщений: 199
Рейтинг :   
Сайт

Re: Выбор категории при добавлении новости (addnews.htm)

Нет ничего невозможного ) У тебя проблема вообще с идеей как это все делать, или с реализацией на уровне html js php ?

Не в сети

#3 2009-04-24 02:06:23

EsCaPeR
Участник
Зарегистрирован: 2008-10-17
Сообщений: 71
Рейтинг :   

Re: Выбор категории при добавлении новости (addnews.htm)

основная проблема с реализацией...знаний не хватает (
интуитивно понимаю что копать нужно тут /engine/includes/inc/functions.inc.php

function makeCategoryList($params = array() /*selected=0, $my=0, $noempty=0, $name='category'*/){
	global $catz, $lang, $mysql;

	if (!is_array($params['skip'])) { $params['skip'] = $params['skip']?array($params['skip']):array(); }
	$name = array_key_exists('name', $params)?$params['name']:'category';

	$out = "<select name=\"$name\" id=\"catmenu\"".($params['class']?' class="'.$params['class'].'"':'').">\n";
	if ($params['doempty'])	{ $out.= "<option value=\"0\">".$lang['no_cat']."</option>\n"; }
	if ($params['doall'])	{ $out.= "<option value=\"\">".$lang['sh_all']."</option>\n"; }
	if ($params['resync'])  {
		$catz = array();
		foreach ($mysql->select("select * from `".prefix."_category` order by posorder asc", 1) as $row) {
			$catz[$row['alt']] = $row;
			$catmap[$row['id']] = $row['alt'];
		}
	}

	foreach($catz as $k => $v){
		if (in_array($v['id'], $params['skip'])) { continue; }
		$out.="<option value=\"".($params['nameval']?$v['name']:$v['id'])."\"".(($v['id']==$params['selected'])?' selected="selected"':'').">".str_repeat('— ', $v['poslevel']).$v['name']."</option>\n";
	}
	$out.="</select>";
	return $out;
}

но чем копать и как - не понимаю  )

Не в сети

#4 2009-04-24 13:01:14

d7p4x
Модератор
Зарегистрирован: 2008-10-13
Сообщений: 199
Рейтинг :   
Сайт

Re: Выбор категории при добавлении новости (addnews.htm)

Если никто еще не сделает, сегодня/завтра попробую )

Не в сети

#5 2009-05-09 16:47:50

EsCaPeR
Участник
Зарегистрирован: 2008-10-17
Сообщений: 71
Рейтинг :   

Re: Выбор категории при добавлении новости (addnews.htm)

d7p4x, получилось что то сделать? у меня даже приблизительно ничего не получается sad
помогите кто может! )

Не в сети

#6 2009-05-09 18:50:35

insider
Участник
Зарегистрирован: 2009-01-25
Сообщений: 229
Рейтинг :   35 
Сайт

Re: Выбор категории при добавлении новости (addnews.htm)

/engine/includes/inc/functions.inc.php
#1. Найти

// makeCategoryList - make <SELECT> list of categories
// Params: set via named array
// * name     - name field of <SELECT>
// * selected - ID of category to be selected
// * skip     - ID of category to skip or array of IDs to skip
// * doempty  - add empty category to the beginning ("no category"), value = 0
// * doall    - all category named "ALL" to the beginning, value is empty
// * nameval  - use DB field "name" instead of ID in HTML option value
// * resync   - flag, if set - we make additional lookup into database for new category list
function makeCategoryList($params = array() /*selected=0, $my=0, $noempty=0, $name='category'*/){
	global $catz, $lang, $mysql;

	if (!is_array($params['skip'])) { $params['skip'] = $params['skip']?array($params['skip']):array(); }
	$name = array_key_exists('name', $params)?$params['name']:'category';

	$out = "<select name=\"$name\" id=\"catmenu\"".($params['class']?' class="'.$params['class'].'"':'').">\n";
	if ($params['doempty'])	{ $out.= "<option value=\"0\">".$lang['no_cat']."</option>\n"; }
	if ($params['doall'])	{ $out.= "<option value=\"\">".$lang['sh_all']."</option>\n"; }
	if ($params['resync'])  {
		$catz = array();
		foreach ($mysql->select("select * from `".prefix."_category` order by posorder asc", 1) as $row) {
			$catz[$row['alt']] = $row;
			$catmap[$row['id']] = $row['alt'];
		}
	}

	foreach($catz as $k => $v){
		if (in_array($v['id'], $params['skip'])) { continue; }
		$out.="<option value=\"".($params['nameval']?$v['name']:$v['id'])."\"".(($v['id']==$params['selected'])?' selected="selected"':'').">".str_repeat('— ', $v['poslevel']).$v['name']."</option>\n";
	}
	$out.="</select>";
	return $out;
}

#1. Добавить после

// makeCategoryBlock - make block of categories
// Params: set via named array
// * name     - field name
// * selected - ID of category to be selected or array of IDs to be selected
// * skip     - ID of category to skip or array of IDs to skip
// * resync   - flag, if set - we make additional lookup into database for new category list
function makeCategoryBlock($params = array()){
	global $catz, $mysql;

	if (!is_array($params['selected'])) { $params['selected'] = $params['selected']?array($params['selected']):array(); }
	if (!is_array($params['skip'])) { $params['skip'] = $params['skip']?array($params['skip']):array(); }
	$name = array_key_exists('name', $params)?$params['name']:'categories';
	$col = isset($params['col']) ? $params['col'] : 3;
	$selected = implode(',', $params['selected']);

	$out = "<input type=\"hidden\" name=\"$name\" id=\"categories\" value=\"$selected\" />\n";
	if ($params['resync'])  {
		$catz = array();
		foreach ($mysql->select("select * from `".prefix."_category` order by posorder asc", 1) as $row) {
			$catz[$row['alt']] = $row;
			$catmap[$row['id']] = $row['alt'];
		}
	}

	foreach($catz as $k => $v){
		if (in_array($v['id'], $params['skip'])) { continue; }
		$out.="<div id=\"cat_{$v['id']}\" onclick=\"selectcat({$v['id']}); return false;\" class=\"catblock".(in_array($v['id'], $params['selected'])?'_selected':'')."\">".str_repeat('— ', $v['poslevel']).$v['name']."</div>";
	}
	return $out;
}

/engine/includes/js/functions.js
#2. Найти

function addcat(){

	if (document.getElementById('categories').value != '' && document.getElementById('catmenu').value != '') {
		document.getElementById('categories').value = document.getElementById('categories').value + ", " + document.getElementById('catmenu').value;
	}
	else if (document.getElementById('catmenu').value != '') {
		document.getElementById('categories').value = document.getElementById('catmenu').value;
	}
	document.getElementById('catmenu').options[document.getElementById('catmenu').selectedIndex] = null;

	if (document.getElementById('catmenu').options.length == 0) {
		document.getElementById('catmenu').disabled = true;
		document.getElementById('catbutton').disabled = true;
	}
}

#2. Добавить после

var categories = new Array();
var className = '';
function selectcat(id){
	if (id in categories && categories[id] != '') {
		categories[id] = '';
		document.getElementById('cat_' + id).className = className;
	}
	else {
		categories[id] = id;
		className = document.getElementById('cat_' + id).className;
		document.getElementById('cat_' + id).className = className + '_selected';
	}
	document.getElementById('categories').value = categories.join(',');
}

/engine/actions/addnews.php
#3. Найти

		'catlist'			=> makeCategoryList(array('nameval' => 1)),

#3. Добавить после

		'catblock'			=> makeCategoryBlock(),

/шаблон/addnews.tpl (на примере default)
#4. Найти

<tr>
<td width="100%" style="padding: 3px;">{l_category} {catlist} <input type="button" name="catbutton" id="catbutton" value="{l_add}" class="button" onClick="addcat(); return false;" /></td>
</tr>

#4. Заменить на

<tr>
<td width="100%" style="padding: 3px;">{catblock}</td>
</tr>

#5. Добавить стили

.catblock {
	float: left;
	width: 33%; /* 100 / 33 = 3 категории в ряду */
}

.catblock_selected {
	float: left;
	width: 33%;
	background: #ff0000; /* красный фон для выделенных категорий */
}

#6. Перейти в браузере по адресу: http://ваш_сайт/engine/includes/js/functions.js и нажать F5 (чтобы обновить functions.js в кэше браузере)

Enjoy!

Не в сети

#7 2009-05-10 18:45:19

EsCaPeR
Участник
Зарегистрирован: 2008-10-17
Сообщений: 71
Рейтинг :   

Re: Выбор категории при добавлении новости (addnews.htm)

insider, просто нет слов!! спасибище огромное! все работает!

Не в сети

Подвал раздела

Работает на FluxBB