Прошу вашей помощи...
Есть скрипт, выводящий меню. Новый раздел / подраздел - новый элемент списка <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 написал(а):
Тут надо еще думать как у тебя функция вызывается.
Но я предполагаю, что он вызывается из цикла примерно так...
Теперь перед циклом надо определить булевую переменную, а в теле цикла ее менять на обратное значение и передавать ее в функцию vam_show_category()
Правим функцию vam_show_category(). Теперь она принимает два аргумента, и в зависимости от второго выводит нужное название класса
Использовал "Тернатный оператор. a ? b : c"
о нем тут © inpost
Но я предполагаю, что он вызывается из цикла примерно так...
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 на противоположное и передачу параметра в функцию?
Цикл вижу, но функция меню вызывается вне этого цикла. Куда необходимо вставить изенение $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 я в принципе не знаю, но Вы и логика помогли решить вопорс :) :
- строку изменения переменной
я оставил в самой изначальной функции. Но так скрипт просто возвращал одно значение (1). А для того, чтобы это заработало переменную $bool нужно было заново передать (включить в скобки, где вызывается эта функция и собственно получить в заголовке самой функции)
Я об этом понятия не имел... :)
hellmin, спасибо!
Но задачу получилось решить. Спасибо за косвенную помощь!
PHP я в принципе не знаю, но Вы и логика помогли решить вопорс :) :
- строку изменения переменной
$bool = $bool==true ? false : true;
я оставил в самой изначальной функции. Но так скрипт просто возвращал одно значение (1). А для того, чтобы это заработало переменную $bool нужно было заново передать (включить в скобки, где вызывается эта функция и собственно получить в заголовке самой функции)
function vam_show_category($counter, $bool)
Я об этом понятия не имел... :)
hellmin, спасибо!