Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Перенос строк в описании атрибута.


pashast

Recommended Posts

Как делать перенос строк в описании атрибута? <br> не работает,

Хотя если заливать XLS-прайс с атрибутами через модуль export-import, то перенос строк работает.

Где можно подправить?

Надіслати
Поділитися на інших сайтах

Слава буржуйским форумам )

файл system\library\request.php

<?php
final class Request {
	public $get = array();
	public $post = array();
	public $cookie = array();
	public $files = array();
	public $server = array();
	
  	public function __construct() {
		$_GET = $this->clean($_GET);
		$_POST = $this->clean($_POST);
// added by Hac
// handel the case user wants a line break

		$_POST = $this->replaceSlashN($_POST);
		
		$_REQUEST = $this->clean($_REQUEST);
		$_COOKIE = $this->clean($_COOKIE);
		$_FILES = $this->clean($_FILES);
		$_SERVER = $this->clean($_SERVER);
		
		$this->get = $_GET;
		$this->post = $_POST;
		$this->request = $_REQUEST;
		$this->cookie = $_COOKIE;
		$this->files = $_FILES;
		$this->server = $_SERVER;
	}
	
  	public function clean($data) {
    	if (is_array($data)) {
	  		foreach ($data as $key => $value) {
				unset($data[$key]);
				
	    		$data[$this->clean($key)] = $this->clean($value);
	  		}
		} else { 
	  		$data = htmlspecialchars($data, ENT_COMPAT);
		}

		return $data;
	}
	
	
// вот-оно вооот-оно костыль монй мечты :D
	public function replaceSlashN($data) {
    	if (is_array($data)) {
	  		foreach ($data as $key => $value) {
				unset($data[$key]);
				
	    		$data[$this->replaceSlashN($key)] = $this->replaceSlashN($value);
	  		}
		} else { 
			// <br/> or <br> are simply reconstitued before saving in the db
	  		$data = str_replace(array("</br>","<br>","<br/>"),"<br/>",$data);
		}

		return $data;
	}
}
?>
  • +1 2
Надіслати
Поділитися на інших сайтах

  • 1 year later...
  • 2 weeks later...

Yesvik

вырезал в контроллере просто чистку html.

http://forum.opencar...t=33539#p185775

как я и думал, если отключить фильтр "htmlspecialchars" то магазин становиться уязвимым к xss атакам. так что лучше включить фильтр чистки html тэгов.

примечательно что вариант предложенный pashast с <br> работает только для самого атрибута, для описания товара <br> не работает :(

пошарился в нете нашел модуль http://www.opencart....=0#.UTRwwpZP1v8 p.s. на моем опен карте не захотел работать, встраивать руками не стал.

тут топик как добавить поддержку html атрибутам http://opencartforum...полю-attribute/ - html добавил но фильтр режет его. получаем html в виде текста.

Объединил оба решения в одно.

В файле admin/view/template/catalog/product_form.tpl

после строки

<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script>

добавить строку

<script type="text/javascript" src="view/javascript/ckeditor/adapters/jquery.js"></script>

после блока

<?php foreach ($languages as $language) { ?>
CKEDITOR.replace('description<?php echo $language['language_id']; ?>', {
filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});
<?php } ?>

добавить

$('#attribute textarea').ckeditor({
filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});

после строки

	attributeautocomplete(attribute_row);

добавить

	$('#attribute-row' + attribute_row + ' textarea').ckeditor({
	filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});

И собственно что бы наш html не превращался в обычный текст.

В файле admin/model/catalog/product.php

ищем

foreach ($product_attribute['product_attribute_description'] as $language_id => $product_attribute_description) {

добавляем

$product_attribute_description['text'] = html_entity_decode($product_attribute_description['text'], ENT_QUOTES, 'UTF-8');

По скольку <p> в редакторе вставляется везде, а после </p> у нас идет пустое место, то это не очень красиво смотрится, поэтому:

В файле catalog/view/theme/default/stylesheet/stylesheet.css нужно добавить в любое место или после.tab-content { ... }

.tab-content p { margin-bottom:0px; }

После .compare-info .price-new { ... } или в любое другое место добавляем

.compare-info p { margin-bottom: 0px; }

Таким образом мы задали отступ снизу для тэга p равный 0 (на странице продукта и странице сравнения).

Надіслати
Поділитися на інших сайтах


По скольку <p> в редакторе вставляется везде, а после </p> у нас идет пустое место, то это не очень красиво смотрится, поэтому:

В файле catalog/view/theme/default/stylesheet/stylesheet.css нужно добавить в любое место или после.tab-content { ... }

.tab-content p { margin-bottom:0px; }

После .compare-info .price-new { ... } или в любое другое место добавляем

.compare-info p { margin-bottom: 0px; }

Таким образом мы задали отступ снизу для тэга p равный 0 (на странице продукта и странице сравнения).

Вроде в конфигах редактора можно прописать параметр, чтобы он не ставил теги когда ему захочется. На форуме тема где-то есть, не найду.

Надіслати
Поділитися на інших сайтах

pashast, знаю, но проще 2 строчки в .css дописать, имхо.

see84, может просто с backup vqmod восстановил файл?

у меня все ок. 0, 400) . '..', стоит. при сохранении товара ничего не происходит...

Надіслати
Поділитися на інших сайтах


  • 2 months later...

Только что сам столкнулся с этой проблемой. Но контроллер трогать мне не захотелось, убирать обработку спецсимволов - это оставить на сайте огромную дырень. Я порылся в исходниках и решил сделать так: перед самым выводом на страницу заменять символы переноса строк на тег <br>. Если вы записывали атрибуты разделяя по строкам все, то вам нужно будет только поменять одну строку в шаблоне и все. Контроллеры целы, переносы есть, все счастливы =)
Для этого требуется в файле /catalog/view/theme/default/template/product/product.tpl приблизительно в 254 строку в стандартном шаблоне заменить

 

<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
        <tr>
          <td><?php echo $attribute['name']; ?></td>
          <td><?php echo $attribute['text']; ?></td>
        </tr>
<?php } ?> 

 

на

 

<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
        <tr>
          <td><?php echo $attribute['name']; ?></td>
          <td><?php echo str_replace("
","<br>",$attribute['text']); ?></td>
        </tr>
<?php } ?>

 

 

В с непечатными символами это выглядит так:

MTJbh1H7.png

  • +1 4
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Если кому надо, то есть способ перенести атрибуты в верхнюю часть карточки товара:

 

В файле catalog/view/theme/default/template/product/product.tpl

 

После строки :

 

<span><?php echo $text_model; ?></span> <?php echo $model; ?><br />

 

Вставил следующее:

 

<?php if ($attribute_groups) { ?>
<?php } ?>
<?php foreach ($attribute_groups as $attribute_group) { ?>
<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
<span><?php echo $attribute['name']; ?><?php echo ":"; ?></span>
<?php echo $attribute['text']; ?>
<?php echo "<br/>"; ?>
<?php } ?>
<?php } ?>

 

А чтобы отключить характеристики внизу вначале этих блоков поставить <!--, а в конце //--> (эти символы отключают блоки) Вдруг потом еще потребуются...

 

<!--
<?php if ($attribute_groups) { ?>
<a href="#tab-attribute"><?php echo $tab_attribute; ?></a>
<?php } ?>
//-->
<!--
<?php if ($attribute_groups) { ?>
<div id="tab-attribute" class="tab-content">
<table class="attribute">
<?php foreach ($attribute_groups as $attribute_group) { ?>
<thead>
<tr>
<td colspan="2"><?php echo $attribute_group['name']; ?></td>
</tr>
</thead>
<tbody>
<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
<tr>
<td><?php echo $attribute['name']; ?></td>
<td><?php echo $attribute['text']; ?></td>
</tr>
<?php } ?>
</tbody>
<?php } ?>
</table>
</div>
<?php } ?>
//-->
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 years later...

Спасибо, groog. Только дополню еще исправлением для переноса в сравнении товаров (catalog/view/theme/default/template/product/compare.tpl)

<td><?php echo $products[$product['product_id']]['attribute'][$key]; ?></td>
Заменяем на

<td><?php echo str_replace("
","<br>",$products[$product['product_id']]['attribute'][$key]); ?></td>
Змінено користувачем kisluk
Надіслати
Поділитися на інших сайтах


  • 8 months later...

супер, то что доктор прописал, ток с вот с compare не работает

 

у меня вот так выглядит

<td><?php echo  $product['attribute'][$key]; ?></td>

как сделать перенос?

Змінено користувачем rodigy
Надіслати
Поділитися на інших сайтах


супер, то что доктор прописал, ток с вот с compare не работает

 

у меня вот так выглядит

<td><?php echo  $product['attribute'][$key]; ?></td>

как сделать перенос?

+ еще бы не помешало добавить отступ вначале строки , а то пробелы тоже режет вначале строки

Надіслати
Поділитися на інших сайтах


  • 1 year later...
В 30.03.2016 в 20:27, rodigy сказал:

+ еще бы не помешало добавить отступ вначале строки , а то пробелы тоже режет вначале строки

здравствуйте. удалось решить проблему с переносом в compare ?

 

Надіслати
Поділитися на інших сайтах


  • 1 month later...
  • 1 year later...
В 09.05.2013 в 20:12, groog сказал:

Только что сам столкнулся с этой проблемой. Но контроллер трогать мне не захотелось, убирать обработку спецсимволов - это оставить на сайте огромную дырень. Я порылся в исходниках и решил сделать так: перед самым выводом на страницу заменять символы переноса строк на тег <br>. Если вы записывали атрибуты разделяя по строкам все, то вам нужно будет только поменять одну строку в шаблоне и все. Контроллеры целы, переносы есть, все счастливы =)
Для этого требуется в файле /catalog/view/theme/default/template/product/product.tpl приблизительно в 254 строку в стандартном шаблоне заменить

 


<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
        <tr>
          <td><?php echo $attribute['name']; ?></td>
          <td><?php echo $attribute['text']; ?></td>
        </tr>
<?php } ?> 

 

на

 


<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
        <tr>
          <td><?php echo $attribute['name']; ?></td>
          <td><?php echo str_replace("
","<br>",$attribute['text']); ?></td>
        </tr>
<?php } ?>

 

 

В с непечатными символами это выглядит так:

MTJbh1H7.png

Блин, это же гениально) 

Можно любую комбинацию символов использовать при наполнении и потом просто подмену этой комбинации делать.

Надіслати
Поділитися на інших сайтах

  • 2 months later...

коллеги, а как ограничить длину поля text в атрибуте например 30 символами, а далее, чтобы на новую строку перенос шёл, но не разбивая целое слово, а от пробела делая отсчёт?

 

сейчас выглядит так:

пробл.png

Змінено користувачем pavels1978
Надіслати
Поділитися на інших сайтах


  • 6 months later...
  • 5 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.