Перейти к содержанию
Форум поддержки пользователей VamShop

Вопрос по модулю Browse categories


retroman

Рекомендуемые сообщения

Доброго времени суток. Устанавливаю этот модуль довольно часто на свои проекты. Но, как правило, несколько его модифицирую под свои специфичные задумки. Так и нынче надо сделать.

Правки у меня обычно касаются файла includes/modules/sitemap.php - функции function get_category_tree .

Вот такой вот у меня код на сей раз:

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

	while ($categories = vam_db_fetch_array($categories_query,true)) {
		$href = vam_href_link(FILENAME_DEFAULT, vam_category_link($categories['categories_id'],$categories['categories_name']));

		if ($categories['categories_image'] != '')
			$image = DIR_WS_IMAGES.'categories/'.$categories['categories_image'];
		else
			$image = DIR_WS_IMAGES.'product_images/noimage.gif';

        if ($categories['categories_id'] == '4')

		$category_tree_array[] = array(
			'id' => $categories['categories_id'],
			'name' => $categories['categories_name'],
			'text' => $categories['categories_start'],
			'image' => $image,
			'link' => $href
		);
		if ($categories['categories_id'] == '8')

		$category_tree_array[] = array(
			'id' => $categories['categories_id'],
			'name' => $categories['categories_name'],
			'text' => $categories['categories_start'],
			'image' => $image,
			'link' => $href
		);
	}
	return $category_tree_array;
}

Всё почти стандартно. Только описания категории нет, но добавлено categories_start - это у меня поле текстовое. Текст, который мне надо выводить вместо описания категории на главной странице. Вопрос такой. Если я правильно понимаю, что я сделал ( а я почти полный нуб ), то вот этой строкой

if ($categories['categories_id'] == '4') и if ($categories['categories_id'] == '8')- я задаю условие для того чтобы нижеследующий код выводил некоторую информацию только для категорий с id 4 и id 8. Имя категории, изображение категории, ссылку на неё и текст для главной страницы.  С этим проблем нет.

Но две этих основных категории, содержат несколько дочерних категорий. И их вывод мне нужно сделать отдельно и в другом виде (без изображения). Моя обывательская логика подсказывает, что тут требуется конструкция вроде:

$category_tree_array[] = array(
            'id' => $categories['categories_id'],
            'name' => $categories['categories_name'],
            'text' => $categories['categories_start'],
            'link' => $href,
            'sub' => get_category_tree($categories['categories_id'])
        );

 

И тоже с определённым условием, но какое это должно быть условие и вообще, верна ли догадка - сломал голову за вечер. Не подскажете?

 

Ссылка на сообщение
Поделиться на другие сайты

А что ещё за categories_start ?!

Такой колонки в базе данных по умолчанию нет ведь.

Во-первых, лучше испльовать скобки в условии, что б видно было, что именно у Вас внутри условия.

Во-вторых, насколько я понимаю, при таком коде у Вас вообще ничего не будет выводиться кроме категории 4 и 8

Насколько я вижу, у Вас ведь эти условия находятся внутри while ... /while

get_category_tree пусть отдаёт все данные для всех категорий, подкатегории, а внешний вид уже правится всякими условиями в render_categry_tree.

 

Лучше вообще get_category_tree не трогать, а все условия задать в render_category_tree, там, где, собственно, html-код и выводится.

Ссылка на сообщение
Поделиться на другие сайты

categories_start - это я уже добавлял сам. Нужно было ещё одно текстовое поле для категории. По правде говоря, на некоторых проектах у меня таких дополнительных полей штук по десять. У людей порой странные идеи насчёт своих магазинов, но приходится что-то придумывать :)

38 минут назад, support сказал:

Во-первых, лучше испльовать скобки в условии, что б видно было, что именно у Вас внутри условия.

Это фигурные?

40 минут назад, support сказал:

Лучше вообще get_category_tree не трогать, а все условия задать в render_category_tree, там, где, собственно, html-код и выводится.

А вот это дельная мысль. У меня то, как обычно: что начало наобум давать какие-то результаты при экспериментах, к тому и прицепился. Попробую по вашему совету поковыряться.

Ссылка на сообщение
Поделиться на другие сайты
46 минут назад, retroman сказал:

Это фигурные?

1 час назад, support сказал:

Да, а то ведь некорректно может работать код, особенно если у Вас в условии пару строк будет.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, Александр! Повозился и сделал то, чего добивался. В процессе правда понял, что конкретно в данном проекте это будет лишним, но теперь знаю на будущее, что и как делать.

Если вдруг кому-то понадобится, то вот мой новый файл Sitemap.php, который выводит на главной основные две категории в виде: Ссылка - Картинка - Текст и дочерние категории в виде Ссылка - Имя категории. (Дабы не запутывать таких же чайников как и я, убрал из кода лишнюю колонку categories_start, заменив её стандартной колонкой categories_description)

<?php
/* -----------------------------------------------------------------------------------------
   $Id: sitemap.php 782 2007-02-13 10:23:57 VaM $

   VaM Shop - open source ecommerce solution
   http://vamshop.ru
   http://vamshop.com

   Copyright (c) 2007 VaM Shop
   -----------------------------------------------------------------------------------------
   based on:
   (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
   (c) 2002-2003 osCommerce; www.oscommerce.com
   (c) 2003	 nextcommerce; www.nextcommerce.org
   (c) 2004 xt:Commerce (sitemap.php,v 1.19 2004/08/25); xt-commerce.com

   Released under the GNU General Public License
   ---------------------------------------------------------------------------------------*/

$module = new vamTemplate;
$module->assign('tpl_path','templates/'.CURRENT_TEMPLATE.'/');

 //to get category trees
function get_category_tree($parent_id = '0') {
	$categories_query = vamDBquery("select c.categories_id, cd.categories_name, cd.categories_description, c.categories_image, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . $_SESSION['languages_id'] . "' and c.parent_id = '" . $parent_id . "' and c.categories_status = '1' order by c.sort_order, cd.categories_name");

	while ($categories = vam_db_fetch_array($categories_query,true)) {
		$href = vam_href_link(FILENAME_DEFAULT, vam_category_link($categories['categories_id'],$categories['categories_name']));

		if ($categories['categories_image'] != '')
			$image = DIR_WS_IMAGES.'categories/'.$categories['categories_image'];
		else
			$image = DIR_WS_IMAGES.'product_images/noimage.gif';

		$category_tree_array[] = array(
			'id' => $categories['categories_id'],
			'name' => $categories['categories_name'],
			'text' => $categories['categories_description'],
			'image' => $image,
			'link' => $href,
			'sub' => get_category_tree($categories['categories_id'])
		);
	}
	return $category_tree_array;
}

function render_subcategory_tree($array, $level = 2) {
	if (!count($array)) return;
	foreach ($array as $value) {
		$subcategory_tree .= '<div class="page-sidebar pull-left cat'.$level.'">';
		$subcategory_tree .= '<a class="pull-left" href="'.$value['link'].'" rel="nofollow">'.$value['name'].'</div>';
		$subcategory_tree .= '</div>';
	}
	return $subcategory_tree;
}

function render_category_tree($array, $level = 1) {
	if (!count($array)) return;
	foreach ($array as $value) {
		$category_tree .= '<div class="page-sidebar pull-left cat'.$level.'">';
		$category_tree .= '<a class="pull-left" href="'.$value['link'].'" rel="nofollow"><img src="'.$value['image'].'" alt="'.$value['name'].'"></a>'.$value['text'].'</div>';

		if (count($value['sub']) > 0 AND $level < 3) {

			$category_tree .= render_subcategory_tree($value['sub'], $level+1);
		}

		$category_tree .= '</div>';
	}
	return $category_tree;
}

 $module_content = render_category_tree(get_category_tree());

 // if there's sth -> assign it
 if (sizeof($module_content)>=1)
 {
 $module->assign('language', $_SESSION['language']);
 $module->assign('module_content',$module_content);
 // set cache ID
 if (!CacheCheck()) {
 $module->caching = 0;
 $module = $module->fetch(CURRENT_TEMPLATE.'/module/sitemap_default.html');
 } else {
 $module->caching = 1;
 $module->cache_lifetime=CACHE_LIFETIME;
 $module->cache_modified_check=CACHE_CHECK;
 $cache_id = $GET['cPath'].$_SESSION['language'].$_SESSION['customers_status']['customers_status_name'].$_SESSION['currency'];
 $module = $module->fetch(CURRENT_TEMPLATE.'/module/sitemap_default.html',$cache_id);
 }
 	$default->assign('MODULE_sitemap_default', $module);
 }


?>

 

Обошёлся без условий, но приобрёл опыт написания функций. Ну, или, если по честному, списал и переписал.

 

Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, retroman сказал:

Спасибо, Александр! Повозился и сделал то, чего добивался. В процессе правда понял, что конкретно в данном проекте это будет лишним, но теперь знаю на будущее, что и как делать.

 

Не за что.

Хорошо что разобрались и поделились кодом.

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...