0

I am trying to pre-populate an entity reference with a specific game node, when a profile node is added; based on URL of the game the add button is on.

The game node I want to reference in profile node is in the URL of the profile's add page.

By using views to contextually filter, matching the first portion of the url (the game node title), with a game node. Then to be used as the field's select list.

Only selection in drop down would make it seem pre-populated.

                         --

Two content types

  • game
  • profile

*game nodes alias pattern is [node:title]. so just /game1/ , /game2/

I added an alias for each game node to go to the profile add page game1/add > node/add/profile game2/add > node/add/profile

Using Entityreference prepopulate module i use /node/add/game-profile/?field_gmeprfl_game_eref=[node:nid] to generate id to reference; the ? (question mark) prevents the [node:nid] from processing to an id. it stays literaly "/node/add/game-profile/?field_gmeprfl_game_eref=[node:nid]". if i take out the "?" it will process to the nid number.

If I use view entity reference list to contextual filter the game1 part of url against the nodes alias , there is not alias for me to add in contextual filter. (id prefer this way so my links look better than ?field_gmeprfl_game_eref=14

**i use d7 prepopulate entity reference node (?field_gmeprfl_game_eref=[node:nid]), i cant use ? with [node:id] as the ? prevents the tokens from processing. if i can do this and make urls the same as OP: id consider that also.

10
  • Don't overthink that. Simply edit your content type and add a default value for that entity reference field.
    – leymannx
    Commented May 7, 2018 at 6:46
  • it wont be a constant node its referencing. it will change based on the url. Commented May 7, 2018 at 14:57
  • if your on game2/add. the game profile created will reference game node game2. if its at game3/add. the game profile created will reference game node game3. Commented May 7, 2018 at 15:06
  • @brandonc – Please try again to clarify in your question. There's one "game" content type and you can add a game node via multiple URL aliases game1/add, game2/add, game3/add etc. but it will all just create nodes of the same type ("game") where you want a certain field to be prepopulated based on the URL alias you create the node from? Do I understand this right?
    – leymannx
    Commented May 7, 2018 at 16:06
  • it will create a game_profile node. a different node type than the game nodes. yes they all go to the game profile add page, just depends on url of what game will be referenced when profile is made. Commented May 7, 2018 at 16:37

1 Answer 1

0

Your latest update mentions you're having trouble constructing the link, so I'll focus on answering that.

It seems that if you construct the link manually (simply type in the addressbar) everything is working correctly (this is to test that the Entityreference prepopulate module is working correctly on your side).

The problem then seems to be how to construct the link automatically for each of your game nodes, so that by clicking on the link, a Profile creation form is shown with the relevant entity reference prepopulated.

Add Prepopulate links to Views

  1. In your Games views add a field Content: Nid and Exclude from display
  2. After that field (it's important the Nid comes before this) add a new field Global: Custom text
  3. In the Text textarea of that field enter:
    <a href="/node/add/game-profile?field_gmeprfl_game_eref=[nid]">Add new Profile referencing this Game</a>

    Check that the token really is [nid] under Replacement patterns.

Now you have a list of Games with links that when clicked open the Create profile page with the related Game pre-selected.

Add Prepopulate links to Node pages

If you need to display the link on the actual node page, you can se the same Views as above only create a Block with a Contextual filter.

This has to be done through Views block because the module you're using (Entityreference Prepopulate) doesn't have the URL widget feature implemented so you have to work around it.

  1. Create a Block display View of Games
  2. Add the same Fields as above (use the same Views)—the hidden Nid and Custom text with the link code.
  3. Add a Contextual filter Content: Nid and configure it:
    When the filter value is NOT available
    Provide default value
    Content ID from URL

    This will limit the list to show the Prepopulate link for the current node only, otherwise it would show links for all games, like above.

    This filter isn't responsible to the link contruction! Link is being constructed using the Fields!

  4. Place your block in Content region or whereever you want the link to display, restrict the Block visibility to Game pages

Visit some Game pages and click on the links, see they are prepopulated with the nodes where you clicked the link.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.