Как дать понять feeds, что в ячейке список разных терминов?

Главные вкладки

Аватар пользователя univerico univerico 17 июля 2018 в 23:39

Здравствуйте! При попытке импорта с помощью feeds нод, содержащих поле типа ссылки на термин возникла проблема. Есть ячейка со списком терминов (например трех терминов: теримин1, теримин2, теримин3), но при импорте они воспринимаются как один термин "теримин1, теримин2, теримин3"). Использую как разделитель ; так и , на пробу, оба варианта не работают.
Как это исправить? Есть вариант использовать feeds tamper и в описании модуля есть пункт ("Break a comma separated list of words into Taxonomy terms or a multivalued text field."), но я не пойму, какие настройки там нужно сделать.

Лучший ответ

Аватар пользователя VasyOK VasyOK 18 июля 2018 в 11:39
2

Добавить плагин Explode. Разделитель (separator) - запятая с пробелом (для пробела там код символа написан)

Комментарии

Аватар пользователя univerico univerico 18 июля 2018 в 15:06

Спасибо. Как раз делаю по Вашей теме о добавлении нескольких изображений в одной ячейке.
Возникли сложности с созданием файлом CSV, опишу на всякий случай решения.
В моем excell мне не удалось найти возможность менять кодировку, поэтому использую Гугл документы, там автоматически сохраняется в UTF-8. Но там не удалось настраивать разделители. Поэтому была скачана программа libre office. Экспериментальным путем удалось найти оптимальный вариант. Для корректной работы с explode
1)либо в импортере и плагине выбираю запятые и сохраняю по автомату как CSV в Гугл таблицах
2)или в офисе при сохранении выбираю CSV и пункт "изменить настройки фильтра"/после этого нужно снять все галочки и выбрать разделители , и " (запятую и двойные кавычки)

Аватар пользователя univerico univerico 18 июля 2018 в 15:58

Да, спасибо, вроде пока все работает. Одно уточнение еще по разделителям.

при сохранении в Гугл таблицах у меня получилось импортировать 3 термина, перечисленные в одной ячейке через запятую без пробелов, например: термин1,термин2,термин3, а с пробелами (например: термин1, термин2, термин3) только при сохранении в libre office.
В настройках плагина при этом в качестве разделителя выбираю
,%s (запятая процент английская маленька буква s)

Аватар пользователя univerico univerico 25 июля 2018 в 15:09

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

(столбец E это уже другое решение, описанное ниже)
Если с изображениями хоть как-то можно попытаться извратиться и расширение преобразовать в расширение с каким-то знаком, как-то это все потом с плагинаим поэтапно импортировать, то когда в ячейках просто разный текст, ничего такого в принципе невозможно, плагин uniq не подошел, rewrite с повторяющимся токеном источника просто продублировал последнее из импортировнаных значений, вместо того, чтобы добавлять в список, а не замещать все новые варианты.
Пока рабочих только два варианта:
1) Редактировать в редакторе подстановкой формулы, например чтобы объединить две ячейки С2 и D2 с добавлением запятой между ними в ячейке в которой я хочу увидедеть этот объединенный список, я ввожу
=C2& ","&D2 (такое видео нашлось по этой теме)
2)Если столбцов немного, то можно задать соответсвие отдельно для каждого, и по-разному называть столбцы источников в таблице, даже если их нужно импортировать в одно поле, но использовать одно и то же название поля, в которое их надо импортировать.

Аватар пользователя VasyOK VasyOK 25 июля 2018 в 16:35

не знаю если честно. обходимся либр фоисом для таких задач, как вы показываете. на стороне Друпала не замарачиваюсь.

Аватар пользователя univerico univerico 11 июля 2020 в 11:50

Здравствуйте!
Возникла еще проблема при импорте: не могу после тампера отобразить термины через запятую, чтобы при этом они были в словаре без запятой, либо термин добавляется в словаре с запятой (например "термин1," вместо "термин1"), либо термины отображаются просто через пробел в поле ("термин1 термин2" вместо "термин1, термин2")

Сейчас

В ячейке источнике: термин1, термин2

В тампере:

а)explode с разделителем ,%s
тогда в поле потом выводится"термин1 термин2" вместо "термин1, термин2"
пробую после explode добавить find replace
и заменить пробел на запятую и пробел, но все равно выводится в поле без запятой.

Может неправильно что-то ввожу в findd replace? (пробую и просто пробел вводить и %s)
(скриншоты прилагаю

вариант 2

)
Или нужно другой плагин попробовать?

б)в тампере explode с разделителем %s
тогда отображается как нужно в поле, но

в словаре с запятой ("термин1," вместо "термин1")
В настройках mapping соответствий импортера включено функция autocreate если термина нет
(т.е. "термин1," автоматом распознается как новый потому что после него идет разделитель "%s" )

Термины нужны для того, чтобы потом делать через views удобный поиск с сортировкой и фильтрацией
И чтобы пользователи тоже могли сами настраивать.

Если не получится исправить, тогда придется как-то приравнять без участия пользователей, т.е. в своих
настройках где-то для поиска и views "термин1" к "теримн1,"
Только как это сделать?

Аватар пользователя VasyOK VasyOK 11 июля 2020 в 12:24
1

"тогда в поле потом выводится"
При редактировании ноды в поле ссылки на термин видно, что выбрано несколько терминов?

Аватар пользователя VasyOK VasyOK 11 июля 2020 в 15:42
1

Значит импортировалось все правильно и ваша задача вывести на ноде термины правильным способом?
Если да, можно даже через CSS запятые псевдоэлемнтом :after добавить. Либо viewfield в особо сложных случаях.

Аватар пользователя univerico univerico 12 июля 2020 в 11:23

Спасибо. Пробую. А как правильно ввести?
Я предполагаю использовать класс поля с типом "ссылка на термин".

Нужно ли использовать свойство content ?

А как правильно указать запятую в коде?

Очень редко работаю с CSS, поэтому не вполне пойму, как правильно вводить

Я смотрю через f12 класс и ввожу после него по инструкции
.field-type-taxonomy-term-reference .field-label, .field-type-taxonomy-term-reference:after { content:,; }

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

Еще не могу понять, почему появилась проблема: после внесения изменений в дизайн или в настройки отображения откат потом не действует назад.

Кэши и аггрегация в настройках производительности выключены.

Например вчера вместо отображения терминов как ссылок, было настроено отображение простым текстом (поэтому и всплыл вопрос про запятые, потому к ссылкам без запятых глаз уже привык, но непривычно текст без запятых). Сегодня переключаю назад на ссылки, но в поле продолжает отображаться текст.

И убираю добавленную строчку из style.css, но все равно изменения не откатываются назад даже после чистки кэша, запуска крона и f5 .

Аватар пользователя univerico univerico 12 июля 2020 в 11:32

Спасибо. Например здесь
И еще я думаю, может лучше ограничить это определенным типом материала
Если машинное имя типа материала "tip1", то как это добавить в CSS?

Аватар пользователя VasyOK VasyOK 12 июля 2020 в 12:15

По ссылке запятые везде проставлены. Я не понимаю что нужно сделать.
У типа материала есть класс, который в D7 выводится в body: .node-type-tonalnost

Аватар пользователя univerico univerico 12 июля 2020 в 15:13

Простите, второе поле тестовое, там где термины "тест10 тест11 тест12"
В остальных запятые проставлены за счет того, что термины идут в словарь сразу с запятой.

Аватар пользователя VasyOK VasyOK 12 июля 2020 в 15:35
1
.field-type-taxonomy-term-reference li {
  position: relative;
}

.field-type-taxonomy-term-reference li::after {
  content: ",";
}
.field-type-taxonomy-term-reference li:last-child::after {
  content: "";
}

field-type-taxonomy-term-reference - понимаете откуда взят?

Аватар пользователя univerico univerico 13 июля 2020 в 10:09

Спасибо. И после последнего термина нет запятой, благодаря последней строчке, очень удобно или, если что, потом просто добавлю точку.

ield-type-taxonomy-term-reference - понимаете откуда взят?

Да, он у меня уже был прописан, похоже, у меня ошибка была в том, что запятая без кавычек была прописана.

position: relative;
Это относительно чего позиция в данном случае?

А как сами термины теперь выровнять относительно метки поля по горизонтали?

Можно сделать так, чтобы это правило с запятой применялось только к определенному типу материала?
Если тип материала с машинным именем tip1, то так класс и добавить можно? ему автоматом присваивается по машинному имени класс?

Аватар пользователя VasyOK VasyOK 13 июля 2020 в 10:49
1

position: relative; -это позиция не относительно чего, а то что внутренние элементы и псевдоэлементы будут выстраиваться относительно этого контейнера.

выровнять относительно метки поля по горизонтали:

h3.field-label {
  margin: 0;  
}

.field-type-taxonomy-term-reference ul {  
  margin: 0;
  float: left;
  line-height: 28px;
}

Вы видите, что контейнер поля содержит несколько классов:
<div class="field field-name-field-singing-steps-v-opevanie field-type-taxonomy-term-reference field-label-inline clearfix">

Значит можно при конструировании CSS использовать как класс конкретного поля:
field-name-field-singing-steps-v-opevanie
так и класс поля типа ссылки на таксономию:
field-type-taxonomy-term-reference

"к определенному типу материала"
смотрим что в body:
<body class="html not-front not-logged-in one-sidebar sidebar-first page-node page-node- page-node-60 node-type-tonalnost i18n-ru">
Значит ставим .node-type-tonalnost перед CSS правилом.