We use cookies to improve your experience. No personal information is gathered and we don't serve ads. Cookies Policy.

ExpressionEngine Logo ExpressionEngine
Features Pricing Support Find A Developer
Partners Upgrades
Blog Add-Ons Learn
Docs Forums University
Log In or Sign Up
Log In Sign Up
ExpressionEngine Logo
Features Pro new Support Find A Developer
Partners Upgrades
Blog Add-Ons Learn
Docs Forums University Blog
  • Home
  • Forums

Migrating from Playa & Matrix to native solutions?

How Do I?

Linda A's avatar
Linda A
666 posts
10 years ago
Linda A's avatar Linda A

I am working on preparing the way for an upgrade to 3.x and one of the issues I need to deal with is that I am currently using Playa and Matrix. As there’s no date for these add-ons being upgraded, I am looking at abandoning them for the native relationship field and grid. It has been suggested that I should use Datagrab for re-importing the data, and this seems like it will work. However, I am not sure how to get the data exported in the right format in the first place. I am also not sure I can replicate my current setup with the native solutions.

So, the first question is how I would go about doing the export? I have used the approach of setting up custom templates for exporting data in the past, but that has been straight-forward text fields.

The second question is what the equivalent template setup would look like for native relationships? Grid, from the look of it, is very similar to Matrix, so I think I have that one figured out.

My current use of Playa is to link TV-show episodes to characters in the episodes. For each episode, I add all characters that appear, and display them on the episode page like this:

{exp:channel:entries channel="{current_channel}"}
<ul>
{exp:playa:children field="{{current_channel_id}_characters}" orderby="title" sort="asc"}
<li><a href="http://{comment_url_title_auto_path}">{title}</a></li>
{/exp:playa:children}
</ul>
{/exp:channel:entries}

On each character’s page, I then display the episodes they appear in, like this:

{exp:channel:entries channel="{current_channel}"}
<ul>
{exp:playa:parents channel="channel38" orderby="38_id" sort="asc"}
<li><a href="http://{comment_url_title_auto_path}">{38_id}: {title}</a></li>
{/exp:playa:parents}
</ul>
{/exp:channel:entries}
       
Rob Allen's avatar
Rob Allen
3,114 posts
10 years ago
Rob Allen's avatar Rob Allen

If you use an XML template to create the export file for Datagrab you can add the relationships data something like this:

<root>
{exp:channel:entries channel="mychannel" limit="20" disable="pagination" orderby="entry_date" sort="desc" status="open" dynamic="no"}
<entry>
<count>{count}</count>
<title><![CDATA[{title}]]></title>
<urltitle>{url_title}</urltitle>
<entrydate>{entry_date format="%Y-%m-%d %H:%i:%s"}</entrydate>

<relationships>
 {my_related_field}
 <related_title>{title}</related_title>
 {/my_related_field}
</relationship>

</entry>
{/exp:channel:entries}
</root>

That will output your relationship field like this:

<relationships>
    <related_title>Something</related_title>
    <related_title>Something else</related_title>
    <related_title>Something else again</related_title>
</relationship>

Then in Datagrab when mapping your field for the import you’d map relationship/related_title to your new relationships field.

       
Linda A's avatar
Linda A
666 posts
10 years ago
Linda A's avatar Linda A

Thank you, that looks very doable. 😊

Do you have any suggestion for how I’d setup a template for export from Matrix as well? My setup there is 3 fields within the Matrix field, one for an image and two text fields.

       
Rob Allen's avatar
Rob Allen
3,114 posts
10 years ago
Rob Allen's avatar Rob Allen

Matrix > Grid is similar.

In your export template add code to get your matrix data :

<matrix>
 {my_matrix_field}
  <matrix_item>
    <image>{matrix_image_field}</image>
    <text1><![CDATA[{matrix_text1_field}]]></text1>
    <text2><![CDATA[{matrix_text2_field}]]></text2>
  </matrix_item>
 {/my_matrix_field}
</matrix>

…where {matrix_image_field} is the full URL of the image (you can get datagrab to pull the image file across during import) and the matrix_item field repeats according to the number of rows you have. For the image you can also upload them manually and use https://ellislab.com/asset/images/team-photo/imagename.png.

When you do the import you map each matrix data column into Datagrab, see http://brandnewbox.co.uk/support/details/datagrab_and_matrix_fields for examples.

       
Linda A's avatar
Linda A
666 posts
10 years ago
Linda A's avatar Linda A

I’ve finally gotten a chance to test this out. I’ve got the export for the Playa data working fine (I think), though I seem to be running into some issues with the import into a Relationship field. It asks for an ID, and while ID is a required field for this channel, it is supposed to be importing into existing entries, not creating new ones.

I am also having issues with exporting the Matrix data. This is the current result: http://hippoiathanatoi.com/Virtually/Otherworldly/Export

I am guessing the issue is that the text fields I am trying to import can contain html and that this is causing a problem?

       

Reply

Sign In To Reply

ExpressionEngine Home Features Pro Contact Version Support
Learn Docs University Forums
Resources Support Add-Ons Partners Blog
Privacy Terms Trademark Use License

Packet Tide owns and develops ExpressionEngine. © Packet Tide, All Rights Reserved.