Преобразование текста, отформатированного с пробелами, в HTML

У меня есть файл csv, который мне нужно импортировать в систему на основе php, точнее, Magento. Существует поле, которое содержит описание продукта и представляет собой пробел, отформатированный для отступов, а также дефисы (-), используемые для элементов списка. Я мог бы использовать тег <pre> и отображать его как есть, но когда я получил файл csv, каким-то образом строки, которые могли уместиться в одной строке, уже переместились в другую строку. Таким образом, попытки заменить \ r \ n на <br/> (или использовать функцию nl2br) безуспешно, потому что я не хочу, чтобы что-то, что может поместиться в одну строку, отображалось в двух строках.

Я не уверен, можно ли этого достичь с помощью php, подпрограммы VBA в Excel или какого-либо расширения Magento (в данный момент я использую MAGMI, и у него нет таких возможностей). Поэтому я задаю этот вопрос, имея возможность предложить решение с любым из них.

У кого-нибудь есть совет по этому поводу, пожалуйста?

РЕДАКТИРОВАТЬ::

Должно выглядеть так:

Lorem ipsum dolor sit amet, conctetur adipiscing elit.

  • Praesent cursus eu eros quis laoreet.
  • In tincidunt massa sed dui aliquam placerat.

Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam a nulla id dui semper tristique. Vivamus rutrum auctor neque, eu tincidunt magna dapibus vitae. Целое число felis mi, luctus ut mollis at, mollis nec lacus. Vestibulum et dictum turpis. Присутствует в neque sed mauris semper hendrerit.

  • Vivamus rhoncus magna ipsum
  • сидеть amet ullamcorper lectus eleifend ut. Sed semper dui quis accumsan suscipit.
  • Donec eu lacus sed dolor fermentum fermentum.
  • Curabitur iaculis molestie ante a bibendum.

Что значит:

  • Текст не должен содержать разрыв строки, если он не предназначен.
  • Ширина текста должна зависеть от контейнера, а не от форматирования пробелов (почему-то текст узкий и не расширяется, даже если я настраиваю ширину столбца в csv) #
  • Если возможно, тире следует заменить вложением элемента списка, но на данный момент это не самая большая проблема.

В настоящее время текст выглядит следующим образом:

Lorem ipsum dolor sit amet, conctetur adipiscing elit. - Praesent cursus eu eros quis laoreet. - In tincidunt assa sed dui aliquam placerat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam a nulla id dui semper tristique. Vivamus rutrum auctor neque, eu tincidunt magna dapibus vitae. Целое число felis mi, luctus ut mollis at, mollis nec lacus. Vestibulum et dictum turpis. Присутствует в neque sed mauris semper hendrerit. - Vivamus rhoncus magna ipsum - sit amet ullamcorper lectus eleifend ut. Sed semper dui quis accumsan suscipit. - Donec eu lacus sed dolor fermentum fermentum. - Curabitur iaculis molestie ante a bibendum.

* А если я использую тег <pre>, он выглядит так *

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 
- Praesent cursus eu eros 
quis laoreet. 
- In tincidunt massa sed dui 
aliquam placerat. 

Interdum et malesuada fames 
ac ante ipsum primis in faucibus. 
Aliquam a nulla id dui semper 
tristique. Vivamus rutrum auctor 
neque, eu tincidunt magna 
dapibus vitae. Integer felis mi, 
luctus ut mollis at, mollis nec 
lacus. Vestibulum et dictum turpis. 
Praesent in neque sed mauris 
semper hendrerit. 

- Vivamus rhoncus magna ipsum 
- sit amet ullamcorper lectus 
eleifend ut. Sed semper dui 
quis accumsan suscipit. 
- Donec eu lacus sed dolor 
fermentum fermentum. 
- Curabitur iaculis molestie ante 
a bibendum.

Таким образом, мое описание продукта выглядит либо как один неформатированный блок (что я понимаю, потому что там нет тегов html), либо, если я попытаюсь сохранить форматирование пробелов, оно будет выглядеть слишком узким (не покрывает всю ширину контейнера).

Надеюсь, это достаточно подробно.

P.S.::

Это похоже на то, как ckeditor позволяет пользователям вводить текст, нажимать Enter и в конце, ckeditor заменяет их тегами абзацев и т. Д. Может быть, это работает на обратной стороне регулярного выражения, на которое можно ссылаться? Кто-нибудь знает об этом?


person zarun    schedule 12.03.2014    source источник
comment
Опубликуйте пример импортируемых данных, а также точный пример того, как вы хотите, чтобы они отображались в Magento. Также будет полезно включить образец файла CSV.   -  person Axel    schedule 12.03.2014
comment
@Axel Я добавил некоторые детали. Надеюсь, теперь все достаточно ясно.   -  person zarun    schedule 13.03.2014
comment
Почему бы просто не отформатировать описания CSV с помощью HTML?   -  person Axel    schedule 14.03.2014
comment
У меня 3000 продуктов, в каждом из которых в среднем содержится около 500 слов описания. Так что это исключено.   -  person zarun    schedule 14.03.2014
comment
Плюс, к сожалению, это то, что я спрашиваю, можно ли вместо этого отформатировать существующее описание в формате пробелов, используя html-теги. Просто я не хочу делать это вручную, быть старым и до сих пор не доделать: D   -  person zarun    schedule 14.03.2014


Ответы (2)


Вам нужен конвертер Markdown в HTML. У Magmi нет плагина, который мог бы это сделать, но вы могли бы легко написать его самостоятельно.

  1. Создайте папку и файл плагина Magmi.
  2. Включите PHP-библиотеку Markdown to HTML, например: https://github.com/michelf/php-markdown
  3. Используйте функцию processItemBeforeId() для оперативного обновления описаний в плагине, например:

    public function processItemBeforeId(&$item,$params=null)
    {
        //Use the Markdown class library to convert the description.
        $updated_description = Markdown::defaultTransform($item['description']);
    
        //Update the description of the item before it gets imported.
        $item['description'] = $updated_description;
    }
    
  4. Включите собственный плагин Magmi, и он должен начать преобразовывать описания на лету при импорте.
person Axel    schedule 14.03.2014
comment
Я думаю, это меня намного ближе. Я буду ждать других ответов, а если нет, отмечу это как правильное. - person zarun; 18.03.2014
comment
Есть ли простой способ понять, как писать расширения для MAGMI? Я попробовал немного, но теперь мой MAGMI застрял на странице импорта (без ошибок). - person zarun; 18.03.2014
comment
Самый простой способ - скопировать существующий плагин Magmi и разобрать его / посмотреть, как он работает. Это очень простые файлы PHP, содержащие определенные функции, которые Magmi вызывает в процессе импорта. - person Axel; 18.03.2014
comment
У меня уже есть работающий плагин, в котором есть все необходимые функции. Но когда я использую ´ $ updated_description = Markdown :: defaultTransform ($ item ['description']); ´, я не получаю ни ошибки, ни прогресса, и просто застреваю. Это неправильный способ вызова функции внутри класса? Я также попытался создать объект класса Markdown - но безуспешно. - person zarun; 19.03.2014
comment
Вы можете использовать функцию $this->log('text or variable to output, 'info');, которая выводит информацию журнала в окно журнала в Magmi. Попробуйте вывести результаты в функцию журнала. - person Axel; 19.03.2014
comment
Поскольку код был написан для определенного пространства имен, мне пришлось использовать Michelf \ Markdown :: defaultTransform ($ item ['description']); чтобы фактически использовать функцию. Спасибо за советы Аксель. - person zarun; 20.03.2014
comment
Рад, что ты это понял. Рад помочь :) - person Axel; 20.03.2014

Вы пробовали добавлять html-теги, используя простую замену регулярных выражений? (Например, с помощью preg_replace для перехвата и замены элементов списка соответствующими тегами)

person Saltan    schedule 13.03.2014
comment
да. Я пробовал это. Все, что заканчивается на два \ r \ n, является концом абзаца. Таким образом, я смогу заставить его немного вести себя. Все, что находится между - и \r\n, тоже может быть элементом списка. Но все же это не очень эффективно, потому что каждое описание имеет новое форматирование пробелов. - person zarun; 14.03.2014