Korn

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

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

Korn    0

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

 

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

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

а надо так:

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

в 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>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
igon    9
  <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.... Первый раз в такой нотации вижу. Или это я не в курсе? :(

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

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

 

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

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

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

Поделиться сообщением


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

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

 

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

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

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

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

Поделиться сообщением


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

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

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

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

 

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

Поделиться сообщением


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

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

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

Поделиться сообщением


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

Возможно, да. См. 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')
                	);
				
				}
			}

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
igon    9
Должно быть (примерно) так:

 



<?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')
                );


}
}


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

Поделиться сообщением


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

Да, действительно не показал :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')
				);
			}
		}

Поделиться сообщением


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

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

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

 

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

Поделиться сообщением


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

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

Поделиться сообщением


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

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

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

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

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

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

 

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

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

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

Поделиться сообщением


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

заменила ты это <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')

);

}

}

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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу