DARTHARTH

Вывод нод на странице категории из подкатегорий того же родителя

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

  • Вывод блока на дочерней категории, т.е. имеющей родительскую категорию
  • Количество для вывода — 8 штук (просто эстетически красиво в шаблоне)))
  • Ноды должны быть из категорий той же родительской категории, что и открыта
  • С учетом того, что есть ноды привязанные ТОЛЬКО к родителю, во избежании ситуации, когда у смежных категорий не хватает 8 нод, выводить ноды привязанные к родителю
<?php
	$current_url = $_SERVER['REQUEST_URI'];
	$url = substr($current_url, 1);
	$current_term_path = db_query("SELECT source FROM `url_alias` WHERE `alias` = '$url'")->fetchAll();
	$current_term_id = str_replace('taxonomy/term/', '', $current_term_path['0']->source);
	$parrent_category = db_query("SELECT parent FROM `taxonomy_term_hierarchy` WHERE `tid` = '$current_term_id'")->fetchAll();//получаем айдишник родительской категории
	$parrent_category_id = $parrent_category['0']->parent;
	$nophoto = '<img src="/sites/default/files/default_images/no-photo.jpg" alt="Нет фото"  />';
	//проверяем является ли категория дочерней
	if($parrent_category_id != 0){
		$same_parrent_category = db_query("SELECT tid FROM `taxonomy_term_hierarchy` WHERE `parent` = '$parrent_category_id'")->fetchAll();//получаем список всех дочерних категорий главной каты
		foreach ($same_parrent_category as $sp_cat) {
			$field_category_tids[] = $sp_cat->tid;
		}
		$node_cat = db_query("SELECT entity_id FROM field_revision_field_category WHERE field_category_tid IN (".implode(',',$field_category_tids).") ORDER BY RAND ( )")->fetchAll();//получаем список всех нод дочерних категорий
		$node_cat_count = count($node_cat);//получаем количество нод
		//проверяем хватает ли нод для вывода в блоке
		if($node_cat_count < 8){
			//если меньше 8 выводим смежные и родительской категории
			$a = 0;
			$b = 0;
			//сначала выводим ноды смежных категорий
			foreach($node_cat as $nodes){
				$a++;
				$node_id = $nodes->entity_id;
				$node = node_load($node_id);
				$node_url = drupal_get_path_alias('node/' .$node->nid);
				$image_size = 'list';
				$image_path = $node->field_galery['und']['0']['uri'];
				//костыли для вывода картинки или заглушки, если картинки нет
				if(!empty($node->field_galery)) {
					$node_img = '<img src="'.image_style_url($image_size,  $image_path).'" title ="'.$node->title.'"/>';
				} else {
					$node_img = $nophoto;
				}
				//исключаем ноды текущей категории
				if ($node->field_category['und']['0']['tid'] != $current_term_id){
					//проверка заполнен ли массив ноды для исключения баговых пустых
					if(!empty($node)){
						echo '
						<div class="products_block col-sm-3">
						  <a class="products_link" href="/'.$node_url.'">
							<div class="product_thumbnail">
								'.$node_img.'
							</div>
							<div class="prduct_title">'.$node->title.'</div>
						  </a>
						  <div class="product_price">
							<div class="buy_button">
							  <div id="add2basket-link-'.$node_id.'" class="add2basket-link-container">
								<a href="/basket/add/'.$node_id.'/nojs/?destination=taxonomy/term/'.$current_term_id.'" id="ajax-link--'.$i.'">В корзину</a>
							  </div>
							</div>
						  </div>  
						</div>';    
					}
				} else { $a--; }
			}
			//получаем список нод привязанных конкретно к родительской категории
			$node_parrent_cat = db_query("SELECT entity_id FROM field_revision_field_category WHERE field_category_tid = '$parrent_category_id' ORDER BY RAND ( )")->fetchAll();
			
			//теперь выводим ноды родительской категории, что бы закрыть пустоту и забить 8 шутк
			foreach($node_parrent_cat as $pnodes){
				$b++;
				if($a + $b > 8){break;}
				$pnode_id = $pnodes->entity_id;
				$pnode = node_load($pnode_id);
				$pnode_url = drupal_get_path_alias('node/' .$pnode->nid);
				$pimage_size = 'list';
				$pimage_path = $pnode->field_galery['und']['0']['uri'];
				//костыли для вывода картинки или заглушки, если картинки нет
				if(!empty($pnode->field_galery)) {
					$pnode_img = '<img src="'.image_style_url($pimage_size,  $pimage_path).'" title ="'.$pnode->title.'"/>';
				} else {
					$pnode_img = $nophoto;
				}
				//исключаем ноды текущей категории
				if ($pnode->field_category['und']['0']['tid'] != $current_term_id){
					//проверка заполнен ли массив ноды для исключения баговых пустых
					if(!empty($pnode)){
						echo '
						<div class="products_block col-sm-3">
						  <a class="products_link" href="/'.$pnode_url.'">
							<div class="product_thumbnail">
								'.$pnode_img.'
							</div>
							<div class="prduct_title">'.$pnode->title.'</div>
						  </a>
						  <div class="product_price">
							<div class="buy_button">
							  <div id="add2basket-link-'.$pnode_id.'" class="add2basket-link-container">
								<a href="/basket/add/'.$pnode_id.'/nojs/?destination=taxonomy/term/'.$current_term_id.'" id="ajax-link--'.$a.'">В корзину</a>
							  </div>
							</div>
						  </div>  
						</div>';    
					}
				} else { $b--; }
			}			
		} else {
			//в остальных случаях выводим все 8 нод
			$i = 0;
			foreach($node_cat as $nodes){
				$i++;
				if($i > 8){break;}
				$node_id = $nodes->entity_id;
				$node = node_load($node_id);
				$node_url = drupal_get_path_alias('node/' .$node->nid);
				$image_size = 'list';
				$image_path = $node->field_galery['und']['0']['uri'];
				//костыли для вывода картинки или заглушки, если картинки нет
				if(!empty($node->field_galery)) {
					$node_img = '<img src="'.image_style_url($image_size,  $image_path).'" title ="'.$node->title.'"/>';
				} else {
					$node_img = $nophoto;
				}
				//исключаем ноды текущей категории
				if ($node->field_category['und']['0']['tid'] != $current_term_id){
					//проверка заполнен ли массив ноды для исключения баговых пустых
					if(!empty($node)){
						echo '
						<div class="products_block col-sm-3">
						  <a class="products_link" href="/'.$node_url.'">
							<div class="product_thumbnail">
								'.$node_img.'
							</div>
							<div class="prduct_title">'.$node->title.'</div>
						  </a>
						  <div class="product_price">
							<div class="buy_button">
							  <div id="add2basket-link-'.$node_id.'" class="add2basket-link-container">
								<a href="/basket/add/'.$node_id.'/nojs/?destination=taxonomy/term/'.$current_term_id.'" id="ajax-link--'.$i.'">В корзину</a>
							  </div>
							</div>
						  </div>  
						</div>';    
					} 
				} else { $i--; }
			}
		}
	}
?>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll Up