Возможно, лучше и быстрее использовать Feeds , но так как версия D8 все еще находится в разработке; В качестве альтернативы вы можете использовать Excel + VBA ( Visual Basic для приложений , поставляется с Excel) + Internet Explorer 11.
Вот пример того, как вы можете импортировать ваш CSV-контент, используя VBA.
Например, предположим, что вы хотите импортировать это и создать новые узлы с информацией из вашего CSV:
Вот пример кода VBA:
Sub Drupal_Import()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
Dim x As Integer
For x = 2 To 4 'this controls which rows get added, so only 2 to 4
myURL = "https://rgr79.ply.st/node/add/article"
With IE
.Visible = True 'makes your Internet Explorer window visible.
.navigate myURL
End With
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("visually-hidden")(1).innerText
DoEvents
Loop While el = vbNullString
'the above loops until the visualy-hidden class is detected, which means the edit form has been loaded
Application.Wait (Now + TimeValue("00:00:03")) 'tells the program to wait 3 secs.
Set HTML = IE.document
HTML.getElementById("edit-title-0-value").Value = Cells(x, 1).Value 'here the 1 is the Y (so 1 is Column A)
HTML.getElementById("edit-body-0-value").Value = Cells(x, 2).Value 'here the 2 is the Y (so 2 is Column B)
Cells(x, 3).Value = "Done" 'here we use the 3rd column (Column C) and mark it as Done to keep track.
HTML.getElementsByClassName("button js-form-submit form-submit")(1).Click 'clicks the submit button
Application.Wait (Now + TimeValue("00:00:00")) 'here I have a wait for 0, increase it to 2 or 3 if you see your VBA get stuck after submitting a node.
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("messages messages--status")(0).innerText
DoEvents
Loop While el = vbNullString
'all the above does is loops the code until the drupal message is detected, which means the node was loaded, after the submit.
Next x
End Sub
Убедитесь, что вы меняете доменное имя в myURL = "https://rgr79.ply.st/node/add/article"
соответствии с вашим доменом. Я использую домен simpletest.me , если вы уже не можете сказать.
Как добавить код VBA?
Перейдите на вкладку «Разработчик», а затем на значок Visual Basic (или ALT + F11).
и вставьте код внутри Sheet1 (Sheet1)
Теперь на панели инструментов нажмите tool
и затемReferences
Вам нужно будет прокрутить, найти и поставить галочку
- Microsoft HTML Object Library
- Microsoft Internet Controls
Примечание. Я знаю, что он работает с Internet Explorer 11, но не уверен, что он работает с новым браузером Microsoft Edge.
Теперь вы готовы запустить скрипт. Вы можете сделать это, нажав кнопку Play
Вы также можете запустить его, щелкнув значок макроса (см. Изображение 2), но я предпочитаю делать это из окна VBA.
Итак, вы нажимаете кнопку воспроизведения, и автоматически открывается окно IE, и вы видите это:
Ах, да, ты забыл войти, лол.
Итак, вы переходите к входу в Drupal, а затем закрываете проводник (поскольку история файлов cookie сохраняет ваш логин) и планируете снова нажать кнопку воспроизведения. Но вы не можете ... вы видите, что кнопка воспроизведения неактивна и не можете вносить какие-либо изменения в код VBA ... Что происходит?
Ваш код все еще работает, поэтому вам нужно нажать кнопку Стоп (сброс).
Теперь вы можете снова нажать кнопку воспроизведения и порадоваться миру автоматизации.
Важный
Если вы планируете вставить материал в поле Body (как мы делаем в этом примере), так как Drupal 8 использует CKEditor для этого поля, а CKEditor - JS, мы не можем нацеливаться на класс или идентификатор div; таким образом, мы не можем добавлять контент внутри CKEditor.
К счастью, есть обходной путь. Убедитесь, что в настройках IE 11 Security установлено значение High, это автоматически заблокирует все JS. Следовательно, CKeditor не будет загружаться, и поле body будет таким же, как и другие поля.
Если вам нужно отредактировать пример узла:
Sub Drupal_Edit()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
Dim x As Integer
For x = 2 To 4 'this controls which rows get added, so only 2 to 4
myURL = "https://rgr79.ply.st/node/" & Cells(x, 3) & "/edit"
With IE
.Visible = True 'makes your Internet Explorer window visible.
.navigate myURL
End With
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("visually-hidden")(1).innerText
DoEvents
Loop While el = vbNullString
'the above loops until the visualy-hidden class is detected, which means the edit form has been loaded
Application.Wait (Now + TimeValue("00:00:04")) 'tells the program to wait 3 secs.
Set HTML = IE.document
HTML.getElementById("edit-title-0-value").Value = Cells(x, 1).Value 'here the 1 is the Y (so 1 is Column A)
HTML.getElementById("edit-body-0-value").Value = Cells(x, 2).Value 'here the 2 is the Y (so 2 is Column B)
Cells(x, 4).Value = "Done" 'here we use the 4th column (Column D) and mark it as Done to keep track.
HTML.getElementsByClassName("button js-form-submit form-submit")(1).Click 'clicks the submit button
Application.Wait (Now + TimeValue("00:00:00")) 'here I have a wait for 0, increase it to 2 or 3 if you see your VBA get stuck after submitting a node.
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("messages messages--status")(0).innerText
DoEvents
Loop While el = vbNullString
'all the above does is loops the code until the drupal message is detected, which means the node was loaded, after the submit.
Next x
End Sub