[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Чередование стилей в строках меню
sliva
Господа, здравствуйте!

Прошу вашей помощи...

Есть скрипт, выводящий меню. Новый раздел / подраздел - новый элемент списка <li>, стили описаны во внешнем файле. Необходимо чередовать стили каждого <li>

Нечетный элемент списка - class="bg_list_un"
Четный элемент списка - class="bg_list"

Предполагаю, что нужно сделать счетчик и в зависимости от него выводить один или другой стиль... но сделать не получилось :(

Надеюсь на Вашу помощь.


function vam_show_category($counter) {
global $foo, $categories_string, $id; $mycount;

$categories_string .= '<li class=';
$categories_string .= '
bg_list_un';
$categories_string .= '
id="li_id" onMouseOut="this.id=li_id;" onMouseOver="this.id=over_li_id;">';

if ($foo[$counter]['level']=='1') {
$categories_string .= '<div class="menu_level_1">';
}

if($foo[$counter]['level']>'1') {
$categories_string .= '<div class="menu_level_2">';
}


$categories_string .= '<a href="';

$cPath_new=vam_category_link($counter,$foo[$counter]['name']);

$categories_string .= vam_href_link(FILENAME_DEFAULT, $cPath_new);

$categories_string .= '"
>';

if ( ($id) && (in_array($counter, $id)) ) {
$categories_string .= '<b>';
}

$categories_string .= $foo[$counter]['name'];

if ( ($id) && (in_array($counter, $id)) ) {
$categories_string .= '</b>';
}

$categories_string .= '</a>';

if ($foo[$counter]['level']>'0') {
$categories_string .= "</div>";
}

$categories_string .= '</li>';

if (SHOW_COUNTS == 'true') {
$products_in_category = vam_count_products_in_category($counter);
if ($products_in_category > 0) {
$categories_string .= ' (' . $products_in_category . ')';
}
}

if ($foo[$counter]['next_id']) {
vam_show_category($foo[$counter]['next_id']);
} else {
$categories_string .= '';
}
}




Спустя 8 часов, 24 минуты, 6 секунд (24.12.2010 - 09:42) hellmin написал(а):
Тут надо еще думать как у тебя функция вызывается.
Но я предполагаю, что он вызывается из цикла примерно так...
while($row = mysql_fetch_assoc($result))
{
vam_show_category($row);
}

Теперь перед циклом надо определить булевую переменную, а в теле цикла ее менять на обратное значение и передавать ее в функцию vam_show_category()
$bool = true; // определение булевой переменной
while($row = mysql_fetch_assoc($result))
{
vam_show_category($row, $bool); // передача в функцию дополнительного параметра
$bool = $bool==true ? false : true; // изменение на противоположное значение
}

Правим функцию vam_show_category(). Теперь она принимает два аргумента, и в зависимости от второго выводит нужное название класса
function vam_show_category($counter, $bool) { // Функция принимает два аргумента
...
$categories_string .= 'bg_list'.($bool==true ? '_un' : ''); // Тут меняем название класса в зависимости от полученного второго аргумента
...
}

Использовал "Тернатный оператор. a ? b : c"
о нем тут © inpost

Спустя 3 часа, 14 минут, 46 секунд (24.12.2010 - 12:56) sliva написал(а):
Судя по всему, это тот скрипт (ниже), откуда эта функция и вызывается.
Цикл вижу, но функция меню вызывается вне этого цикла. Куда необходимо вставить изенение $bool на противоположное и передачу параметра в функцию?


<?php
$start = microtime();
$box = new vamTemplate;
$box_content = '';
$id = '';

$box->assign('language', $_SESSION['language']);
// set cache ID
if (!CacheCheck()) {
$cache=false;
$box->caching = 0;
} else {
$cache=true;
$box->caching = 1;
$box->cache_lifetime = CACHE_LIFETIME;
$box->cache_modified_check = CACHE_CHECK;
$cache_id = $_SESSION['language'].$_SESSION['customers_status']['customers_status_id'].$current_category_id;
}

if(!$box->is_cached(CURRENT_TEMPLATE.'/boxes/box_categories.html', $cache_id) || !$cache){

$box->assign('tpl_path', 'templates/'.CURRENT_TEMPLATE.'/');

// include needed functions
require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/vam_show_category.inc.php');
require_once (DIR_FS_INC.'vam_has_category_subcategories.inc.php');
require_once (DIR_FS_INC.'vam_count_products_in_category.inc.php');


$categories_string = '';
if (GROUP_CHECK == 'true') {
$group_check = "and c.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
} else { $group_check=''; }

$categories_query = "select c.categories_id,
cd.categories_name,
c.parent_id from "
.TABLE_CATEGORIES." c, ".TABLE_CATEGORIES_DESCRIPTION." cd
where c.categories_status = '1'
and c.parent_id = '0'
"
.$group_check."
and c.categories_id = cd.categories_id
and cd.language_id='"
.(int) $_SESSION['languages_id']."'
order by sort_order, cd.categories_name"
;
$categories_query = vamDBquery($categories_query);

while ($categories = vam_db_fetch_array($categories_query, true)) {
$foo[$categories['categories_id']] = array ('name' => $categories['categories_name'], 'parent' => $categories['parent_id'], 'level' => 0, 'path' => $categories['categories_id'], 'next_id' => false);

if (isset ($prev_id)) {
$foo[$prev_id]['next_id'] = $categories['categories_id'];
}

$prev_id = $categories['categories_id'];

if (!isset ($first_element)) {
$first_element = $categories['categories_id'];
}
}


//------------------------
if ($cPath) {
$new_path = '';
$id = preg_split('/_/', $cPath);
reset($id);
while (list ($key, $value) = each($id)) {
unset ($prev_id);
unset ($first_id);
$categories_query = "select c.categories_id, cd.categories_name, c.parent_id from ".TABLE_CATEGORIES." c, ".TABLE_CATEGORIES_DESCRIPTION." cd where c.categories_status = '1' and c.parent_id = '".$value."' ".$group_check." and c.categories_id = cd.categories_id and cd.language_id='".$_SESSION['languages_id']."' order by sort_order, cd.categories_name";
$categories_query = vamDBquery($categories_query);
$category_check = vam_db_num_rows($categories_query, true);
if ($category_check > 0) {
$new_path .= $value;
while ($row = vam_db_fetch_array($categories_query, true)) {
$foo[$row['categories_id']] = array ('name' => $row['categories_name'], 'parent' => $row['parent_id'], 'level' => $key +1, 'path' => $new_path.'_'.$row['categories_id'], 'next_id' => false);

if (isset ($prev_id)) {
$foo[$prev_id]['next_id'] = $row['categories_id'];
}

$prev_id = $row['categories_id'];

if (!isset ($first_id)) {
$first_id = $row['categories_id'];
}

$last_id = $row['categories_id'];
}
$foo[$last_id]['next_id'] = $foo[$value]['next_id'];
$foo[$value]['next_id'] = $first_id;
$new_path .= '_';
} else {
break;
}
}
}


vam_show_category($first_element);

$box->assign('BOX_CONTENT', $categories_string);

}

// set cache ID
if (!$cache) {
$box_categories = $box->fetch(CURRENT_TEMPLATE.'/boxes/box_categories.html');
} else {
$box_categories = $box->fetch(CURRENT_TEMPLATE.'/boxes/box_categories.html', $cache_id);
}

$vamTemplate->assign('box_CATEGORIES', $box_categories);
?>

Спустя 3 часа, 42 минуты, 12 секунд (24.12.2010 - 16:38) hellmin написал(а):
В первой посте внизу есть такой кусок

if ($foo[$counter]['next_id']) {
$bool = $bool==true ? false : true;
vam_show_category($foo[$counter]['next_id'], $bool);
} else {
$categories_string .= '';
}

Видимо сюда

Спустя 1 час, 39 минут, 10 секунд (24.12.2010 - 18:18) sliva написал(а):
hellmin, так тоже не заработало :(
Но задачу получилось решить. Спасибо за косвенную помощь!
PHP я в принципе не знаю, но Вы и логика помогли решить вопорс :) :
- строку изменения переменной
 $bool = $bool==true ? false : true;

я оставил в самой изначальной функции. Но так скрипт просто возвращал одно значение (1). А для того, чтобы это заработало переменную $bool нужно было заново передать (включить в скобки, где вызывается эта функция и собственно получить в заголовке самой функции)
function vam_show_category($counter, $bool)

Я об этом понятия не имел... :)
hellmin, спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.