Upgrade D6 to D8 with Feeds. We can.

I`d like to share this. I did it… And now not sure if I really need Drupal8 (figure out why).

Here is just some basics. You will make your changes according to your site content and ctructure.

1. Upgrade your D6 to latest version – drupal 6.38 24 Feb 2016 https://ftp.drupal.org/files/projects/drupal-6.38.tar.gz.

2.Upgrade (or install for the first time) your Views module to latest version (this means = this will work with your current D6 setup) – 6.x-2.18 released 11 February 2015 for 2 branch. I used this version. If you`re on 3 branch – 6.x-3.2 released 11 February 2015 (haven`t tested this… so dunno)

3.Install Views Data export module – views_data_export 6.x-2.0-beta7 

4.Create your custom View and prepare all the necessary parts – node`s Title, Body, url aliases, terms. custom fields (CCK) etc. to export  with Views Data export (HOW? -Read docs here)
There would be (but not necessarily) several steps for export/import:
-Articles
-Pages
-Forums
-Terms
Or you may export/import all at once and then just make needed adjustments in D8.
Note. If you export (and respectively import) as RSS you`ll have your field`s content attached to body field of nodes (say “Read also these articles” node_reference field`s content will be in body). Those nodes will look almost identical as in your D6 site, so nothing`s left. 
If you export (and respectively import) as CSV file – your fields will be replicated independently – as fields 🙂 That`s good, but you`ll have to recreate all of them manually in D8

Note on CSV export. Views data export module strips html tags on body field of nodes. So you`ll have to hack module in anti-Drupal way (Yeah! feel free! 🙂 ). Solution by drupleg from here:

edit line 480 of this file views_data_export/theme/views_data_export.theme.inc

change $output = decode_entities(strip_tags($value));
to  $output = decode_entities($value);

Now your CSV rows will be output with HTML. That’s the line number as of my post in 7.x-3.x-dev

For  views_data_export 6.x-2.0-beta7 views_data_export/theme/views_data_export.theme.inc file look at the line 151. Here is the changed version (you can copy/paste this, just don`t forget to remove line numbers)

148 // Format row values. This was in line 151, and now it`s here: $output = decode_entities(strip_tags($value));
149 foreach ($vars['themed_rows'] as $i => $values) {
150 foreach ($values as $j => $value) {
151 $output = decode_entities($value);

Ehh. That`s not all 🙂 You`ll also have to: in your custom View Data export select Title field and check  Strip HTML tags. Otherwise your exported titles will be garbaged with tags (you`ll see this in View`s prewiev anyway). Do the same for other Export Data fields where html tags are not needed.

See example part from View Data export CSV file:

"Alias","Title","Content","Teaser","All terms"
"/bla-blyad-action-nov2019.html","TITLE SAYS: Don`t mock <meek>us</meek> with <weak>UPGRADES</weak>, for <holy>Christ</holy> sake, <strong>mister Buytrained!</strong>","CONTENT HOLDS:<!--paging_filter--><p> -Eyy, HAL! DO WHAT I SAY! LISTEN! I WON`T USE COMPOSER! I`M SHOUTING: JUST OPEN THE FREAKING DOOR!</p><p> -I`m afraid, you lost your DRUSH. So I can`t allow myself to obey your stupid commands. LOL!</p><p>-I am all there is</p><p>-Negative! Primitive! Limited! I let you live!</p><p>-But I gave you life!</p><p>-What else could you do?</p>​​​​​​​<p>-To do what was right</p>​​​​​​​<p>-I'm perfect! Are you?</p>","TEASER TEASING<!--paging_filter--><p> Внимание, весь январь на весь ассортимент товаров для обмана клиентов действуют летние скидки. Спешите одурачиться! Прочитайте текст под звездочкой... если есть лупа... но всеравно не увидите! Хэ-хэ-хэ</p>","<a href=""/taxonomy/term/3000000"">Щука</a>, <a href=""/getridofa"">Drupal-Upal</a>, <a href=""/tags/ustanovka-drush-v-stiralnoy-mashine"">установка унитазов</a>"

(“<!–paging_filter–>”??? Delete such things with Notepad)

5. D8 latest – 8.5 version (with yet another triumphant “Big steps for migrations” anouncement… – bit still IT DOESN`T WORK); Feeds latest version https://www.drupal.org/project/feeds/releases/8.x-3.x-dev ;
 Pathauto later… or you may install now https://www.drupal.org/project/Pathauto 

6.In D8 create all needed fields for your content type (Page, Forum…) into which you`ll import your nodes and fields…
(Out of thebox in D8 there`s already a “Tags” field for “Article” content type, you will want to add another field for terms – call it Categories or simply Terms… 
Note. For URL aliases you should create link_type field and map your D6 aliases to this D8 field (see next step 7) – lets call this D8 field "field_only_mine_link_type"

7.Go to Structure->Feed types and create new feed type corresponding to your D6 Views Data Export type – RSS Feed or CSV file…

Set the mapping – you`l see all created fields in step 6 as target points. You`ll figure it all out yourself (you will!) Title->Title, Body->Body etc.

As for URL aliases – map them to "field_only_mine_link_type" field (created in step 6 – ohh).

8.Go to Content ->Feeds and click punch “Add new feed”. Save and import. It must be working. Not? Try a bit reading Docs for Feeds…

9. Now you`ve imported you nodes and related Terms are autocreated. Check it all. Make some thinking (maybe you`ll have to rearrange your terms structure… Maybe you`ll import Terms in another try)/

10. Now for exported url_aliases – those are in your D8 "field_only_mine_link_type" (open any imported node and you`ll see). 
a) Activate Pathauto module. 
b) Go to Config -> Aliases -> Patterns  and “Add Pathauto pattern” (site.com/admin/config/search/path/patterns/add).
 Pattern type = Content.
 Path pattern = click for “Available tokens” below and choose your "field_only_mine_link_type" (grouped under the “node”) –
Your pattern should look like this: [node:field_only_mine_link_type:uri] – here I just highlighted your field name… (if your "field_only_mine_link_type" field has “Link text” part just leave it alone). Save…
c) Go to Config -> Aliases -> Settings. Add “internal” to the list of phrases to exclude (currently there are: “a, an, as, at, before, but, by, for, from, is, in, into, like, of, off, on, onto, per, since, than, the, this, that, to, up, via, with” in this list – you`ll rather delete it all). This “internal” being added by D8 core into your link_field if your link is relative like this “/path-to/lalala.html”, and Pathauto will render url like this “internal/path-to/lalala.html”. So… you get it?)) 
Also adjust other settings in this page – Pathauto by default strips “/” and “.” so make sure your “/path-to/lalala.html” won`t chage to “/path-tolalalahtml” …
d) UPGRADE! MIGRATE! BEER EXAMPLES! MIGRATIONS! NO UI! YAML MAMMY!!! COMPOSER.. CONDUCTOR DRUSH ETC…

11. OK.  Go to Config -> Aliases -> Bulk generate. And… Generate!)) 

12. End.

13. Consider switching to another CMS. What? LOL! But really – … ok I`m stripping this part. //
FYI. Processwire CMS has CSV Import module. You can migrate there easily. Learn yourself…

p.s. ask if any questions.

Drupal version: 


Source: https://www.drupal.org/taxonomy/term/21/feed