Andrew Fletcher published: 20 June 2022 2 minutes read
In this instance, I'll check the beginning of the string. I want to focus on the href's that start with /node/. Which has been added using the variable $catchPhrase.
Using the Drupal service path_alias to return the node.nid as follows:
/**
* Load the node nid from the URL alias.
*
* @param string $url URL string.
*
* @return any
*/
public function getNodeNidFromAlias($url, $phrase)
{
// Default values.
$nid = null;
$path = \Drupal::service('path_alias.manager')->getPathByAlias($url);
$strlen = strlen($phrase);
if (substr($path, 0, $strlen) === $phrase) {
$nid = substr($path, $strlen, strlen($path) - $strlen);
}
return $nid;
}
If you are using PHP8, then instead you can use
str_starts_with('https://www.codebales.com', 'https')
How was the getNodeNidFromAlias() used?
The initial call came from
$nid = $this->helper->getNodeNidFromAlias($link['href'], '/node');
$type = $this->helper->getTypeFromNid($nid);The section of the helper file was
/**
* Load the node nid from the URL alias.
*
* @param string $url URL string.
*
* @return any
*/
public function getNodeNidFromAlias($url, $phrase)
{
// Default values.
$nid = null;
$path = \Drupal::service('path_alias.manager')->getPathByAlias($url);
$strlen = strlen($phrase);
if (substr($path, 0, $strlen) === $phrase) {
$nid = substr($path, $strlen, strlen($path) - $strlen);
}
return $nid;
}
/**
* Get the node type.
*
* @param any $nid Node nid.
*
* @return any
*/
public function getTypeFromNid($nid)
{
if (is_null($nid)) {
return null;
}
$node = \Drupal\node\Entity\Node::load($nid);
return $node->getType();
}