Jump to content
Sign in to follow this  
Korn

[Решено] помогите разобраться с хлебными крошками

Recommended Posts

Уважаемые, помогите разобраться.

 

На странице товара хлебные крошки отображаются так:

Главная » Каталог товаров » Кухни » Каталог товаров » Лиана-Фантазия » Настенные модули для кухни "Лиана-Фантазия" » Боковой настенный модуль для кухни "Лиана - Фантазия"

а надо так:

Главная » Каталог товаров » Кухни » Лиана-Фантазия » Настенные модули для кухни "Лиана-Фантазия" » Боковой настенный модуль для кухни "Лиана - Фантазия"

в product.tpl

  <div class="breadcrumb">
  <?php foreach ($breadcrumbs as $breadcrumb): ?>
  <?php echo $breadcrumb['separator']; ?>
  <?php if ($breadcrumb == end($breadcrumbs)): ?>
  <?php echo $breadcrumb['text']; ?>
  <?php else: ?>
  <a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
  <?php endif; ?>
  <?php endforeach; ?>
  </div>

Share this post


Link to post
Share on other sites
  <div class="breadcrumb">
  <?php foreach ($breadcrumbs as $breadcrumb): ?>
  <?php echo $breadcrumb['separator']; ?>
  <?php if ($breadcrumb == end($breadcrumbs)): ?>
  <?php echo $breadcrumb['text']; ?>
  <?php else: ?>
  <a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
  <?php endif; ?>
  <?php endforeach; ?>
  </div>

Двоеточия вместо фигурных скобок, функция end($breadcrumbs), оператор endforeach.... Первый раз в такой нотации вижу. Или это я не в курсе? :(

Share this post


Link to post
Share on other sites

Обратил внимание, что такая проблема только у товаров, лежащих на третьем уровне каталога.

У товаров на 2 уровне всё правильно отображается.

Share this post


Link to post
Share on other sites

Неужели ни кто не сталкивался?  :mellow:

Share this post


Link to post
Share on other sites

Надо же, в PHP еще и альтернативный синтаксис для foreach есть. Как много надо знать....

 

Коль скоро готовых решений нет, осмелюсь пальцем в небо:

Каталог товаров » Кухни » Лиана-Фантазия » Настенные модули для кухни "Лиана-Фантазия"

Это уже 4 уровня

Share this post


Link to post
Share on other sites

Надо же, в PHP еще и альтернативный синтаксис для foreach есть. Как много надо знать....

 

Коль скоро готовых решений нет, осмелюсь пальцем в небо:

Каталог товаров » Кухни » Лиана-Фантазия » Настенные модули для кухни "Лиана-Фантазия"

Это уже 4 уровня

Да, 4. Ошибся. Проблема начинается с 4 уровня. Это принципиально?

Share this post


Link to post
Share on other sites

Двоеточия вместо фигурных скобок, функция end($breadcrumbs), оператор endforeach.... Первый раз в такой нотации вижу. Или это я не в курсе? :(

Альтернативный синтаксис управляющих структур

кто-то на CodeIgniter помешан.

 

Korn, скорее всего криворукость шаблон-мейкера

Share this post


Link to post
Share on other sites

Да, 4. Ошибся. Проблема начинается с 4 уровня. Это принципиально?

Возможно, да. См. product/product.PHP. Скорее всего, там массив $breadcrumbs формируется для 3-х уровней вложенности. Или покажите этот кусок здесь

Share this post


Link to post
Share on other sites

Возможно, да. См. product/product.PHP. Скорее всего, там массив $breadcrumbs формируется для 3-х уровней вложенности. Или покажите этот кусок здесь

<?php  
class ControllerProductProduct extends Controller {
	private $error = array(); 
	
	public function index() { 
		$this->language->load('product/product');
	
		$this->data['breadcrumbs'] = array();

		$this->data['breadcrumbs'][] = array(
			'text'      => $this->language->get('text_home'),
			'href'      => $this->url->link('common/home'),			
			'separator' => false
		);
		
		$this->load->model('catalog/category');	
		
		if (isset($this->request->get['path'])) {
			$path = '';
			
			$parts = explode('_', (string)$this->request->get['path']);
			
			$category_id = (int)array_pop($parts);
				
			foreach ($parts as $path_id) {
				if (!$path) {
					$path = $path_id;
				} else {
					$path .= '_' . $path_id;
				}
				
				$category_info = $this->model_catalog_category->getCategory($path_id);
				
		    	if ($category_info) {
				    $this->data['breadcrumbs'][] = array(
                    	'href'      => $this->url->link('common/catalog'),
                   	    'text'      => $this->language->get('Каталог товаров'),
                        'href'      => $this->url->link('product/category', 'path=' . $path),
                        'text'      => $category_info['name'],
                        'separator' => $this->language->get('text_separator')
                	);
				
				}
			}

На данный момент отображает так:

 

Главная » Каталог товаров » Кухни » Лиана » Напольные модули для кухни "Лиана"

 

и при переходе в товар "убирает" пункт "Каталог товаров"

 

Главная » Кухни » Лиана » Напольные модули для кухни "Лиана" » Боковой напольный модуль для кухни "Лиана"

Share this post


Link to post
Share on other sites
Должно быть (примерно) так:

 



<?php  
class ControllerProductProduct extends Controller {
private $error = array(); 


public function index() { 
$this->language->load('product/product');


$this->data['breadcrumbs'] = array();


$this->data['breadcrumbs'][] = array(
'text'      => $this->language->get('text_home'),
'href'      => $this->url->link('common/home'),
'separator' => false
);
//    $this->data['breadcrumbs'][] = array(
//                     'href'      => $this->url->link('common/catalog'),
//                      'text'      => $this->language->get('Каталог товаров'),
//'Каталог товаров' лучше затолкать в языковый файл. Для единообразия.
//                        'separator' => $this->language->get('text_separator')
                );


$this->load->model('catalog/category');


if (isset($this->request->get['path'])) {
$path = '';


$parts = explode('_', (string)$this->request->get['path']);


$category_id = (int)array_pop($parts);


foreach ($parts as $path_id) {
if (!$path) {
$path = $path_id;
} else {
$path .= '_' . $path_id;
}


$category_info = $this->model_catalog_category->getCategory($path_id);


    if ($category_info) {
   $this->data['breadcrumbs'][] = array(
//
                        'href'      => $this->url->link('product/category', 'path=' . $path),
                        'text'      => $category_info['name'],
                        'separator' => $this->language->get('text_separator')
                );


}
}


Измененные строки пометил комментариями. Кусок, который готовит последнюю крошку (которая не ссылка) Вы не показали :(. Или ее просто нет :)

Share this post


Link to post
Share on other sites

Да, действительно не показал :oops: Сорри) 

// Set the last category breadcrumb
			$category_info = $this->model_catalog_category->getCategory($category_id);
				
			if ($category_info) {			
				$url = '';
				
				if (isset($this->request->get['sort'])) {
					$url .= '&sort=' . $this->request->get['sort'];
				}	
	
				if (isset($this->request->get['order'])) {
					$url .= '&order=' . $this->request->get['order'];
				}	
				
				if (isset($this->request->get['page'])) {
					$url .= '&page=' . $this->request->get['page'];
				}
				
				if (isset($this->request->get['limit'])) {
					$url .= '&limit=' . $this->request->get['limit'];
				}
										
				$this->data['breadcrumbs'][] = array(
					'text'      => $category_info['name'],
					'href'      => $this->url->link('product/category', 'path=' .$this->request->get['path'] ),
					'separator' => $this->language->get('text_separator')
				);
			}
		}

Share this post


Link to post
Share on other sites

А предложенные мною изменения попробовали?

Share this post


Link to post
Share on other sites

А предложенные мною изменения попробовали?

Только сейчас дошли руки... Внёс изменения, заработало! :eek:  Огромное спасибо!

Share this post


Link to post
Share on other sites

Возможно, да. См. product/product.PHP. Скорее всего, там массив $breadcrumbs формируется для 3-х уровней вложенности. Или покажите этот кусок здесь

 

Ткните в код, где формируется для 3х уровней ? Нужно расширить до 4-5. Спасибо!

Share this post


Link to post
Share on other sites

Мое "Скорее всего" не подтвердилось. В коде используется что-то вроде рекурсии, т.е уровень вложенности может быть любым.

Share this post


Link to post
Share on other sites

Обратил внимание, что такая проблема только у товаров, лежащих на третьем уровне каталога.

У товаров на 2 уровне всё правильно отображается.

У меня такая проблема на 2 уровне??Что делать то?

Share this post


Link to post
Share on other sites

1. Не бегать по топикам с дублями проблемы

2. Послушать Chukcha и поменять связи хотя бы для одного товара.

Share this post


Link to post
Share on other sites

1. Не бегать по топикам с дублями проблемы

2. Послушать Chukcha и поменять связи хотя бы для одного товара.

 

1. Не бегать по топикам с дублями проблемы

2. Послушать Chukcha и поменять связи хотя бы для одного товара.

Я сделала для одного товара,все получилось! Но я ж не могу всем 5000-6000 менять руками. Я просто решение ищу и все. Некоторые другое предлагают. Что то в коде надо поменять.

Share this post


Link to post
Share on other sites

заменила ты это <div class="breadcrumb">

<?php foreach ($breadcrumbs as $breadcrumb): ?>

<?php echo $breadcrumb['separator']; ?>

<?php if ($breadcrumb == end($breadcrumbs)): ?>

<?php echo $breadcrumb['text']; ?>

<?php else: ?>

<a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>

<?php endif; ?>

<?php endforeach; ?>

</div>

 
 
 
на это
 
 
 
а стой
 
 
 
я мож не так
 
 
 
ну лан в общем
 
 
 
тот код заменил на этот
 
 
 
<?php 

class ControllerProductProduct extends Controller {

private $error = array(); 

public function index() { 

$this->language->load('product/product');

$this->data['breadcrumbs'] = array();

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_home'),

'href' => $this->url->link('common/home'), 

'separator' => false

);

// $this->data['breadcrumbs'][] = array(

// 'href' => $this->url->link('common/catalog'),

// 'text' => $this->language->get('Каталог товаров'),

//'Каталог товаров' лучше затолкать в языковый файл. Для единообразия.

// 'separator' => $this->language->get('text_separator')

);

$this->load->model('catalog/category'); 

if (isset($this->request->get['path'])) {

$path = '';

$parts = explode('_', (string)$this->request->get['path']);

$category_id = (int)array_pop($parts);

foreach ($parts as $path_id) {

if (!$path) {

$path = $path_id;

} else {

$path .= '_' . $path_id;

}

$category_info = $this->model_catalog_category->getCategory($path_id);

if ($category_info) {

$this->data['breadcrumbs'][] = array(

//

'href' => $this->url->link('product/category', 'path=' . $path),

'text' => $category_info['name'],

'separator' => $this->language->get('text_separator')

);

}

}

 
 
 
и стало выдавать ошибку вот
 
 
 
при нажатии на товары
 
 

Вот переписка с моим админом

Share this post


Link to post
Share on other sites

"тот код заменил на этот", не раскомментировав строки? Естественно будут ошибки...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.