Created
February 14, 2013 09:57
-
-
Save Paulmicha/4951673 to your computer and use it in GitHub Desktop.
Drupal 7 helper functions : get nodes referring to a given nid through a given entity reference field, and the same, but filtered by type
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Drupal 7 helper functions for Entity Reference fields | |
* | |
* @author Paulmicha | |
* @version 0.1 | |
*/ | |
/** | |
* Get nodes referring to a given nid through a given entity reference field | |
*/ | |
function get_referencing_content( $nid, $field_entity_ref ) | |
{ | |
$return = array(); | |
$safe_field_name = preg_replace( '`[^a-z_]`', '', $field_entity_ref ); | |
if ( !empty( $nid ) && !empty( $safe_field_name )) | |
{ | |
$query = "SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created | |
FROM {node} node | |
LEFT JOIN {field_data_$safe_field_name} field_data_$safe_field_name ON node.nid = field_data_$safe_field_name.entity_id AND ( field_data_$safe_field_name.entity_type = 'node' AND field_data_$safe_field_name.deleted = '0' ) | |
INNER JOIN {node} node_field_data_$safe_field_name ON field_data_$safe_field_name.". $safe_field_name ."_target_id = node_field_data_$safe_field_name.nid | |
WHERE node_field_data_$safe_field_name.nid = :nid | |
ORDER BY node_created DESC"; | |
$result = db_query( $query, array( ':nid' => $nid )); | |
foreach( $result as $record ) | |
$return[ $record->nid ] = $record->node_title; | |
} | |
return $return; | |
} | |
/** | |
* Get nodes referring to a given nid through a given entity reference field, filtered by node type | |
*/ | |
function get_referencing_content_by_type( $nid, $field_entity_ref, $type ) | |
{ | |
$return = array(); | |
$safe_field_name = preg_replace( '`[^a-z_]`', '', $field_entity_ref ); | |
if ( !empty( $nid ) && !empty( $safe_field_name )) | |
{ | |
$query = "SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created | |
FROM {node} node | |
LEFT JOIN {field_data_$safe_field_name} field_data_$safe_field_name ON node.nid = field_data_$safe_field_name.entity_id AND ( field_data_$safe_field_name.entity_type = 'node' AND field_data_$safe_field_name.deleted = '0' ) | |
INNER JOIN {node} node_field_data_$safe_field_name ON field_data_$safe_field_name.". $safe_field_name ."_target_id = node_field_data_$safe_field_name.nid | |
WHERE node_field_data_$safe_field_name.nid = :nid | |
AND node.type = :node_type | |
ORDER BY node_created DESC"; | |
$result = db_query( $query, array( ':nid' => $nid, ':node_type' => $type )); | |
foreach( $result as $record ) | |
$return[ $record->nid ] = $record->node_title; | |
} | |
return $return; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment