I made a plugin that should fetch the title and thumbnail from another K2 article on my website when I enter this in an article:
{link="URL"}
It did work prior updating k2, but now its just blank in the article.
I might add, I also updated to php version 8.0.28 before updatiing K2, but the code should be compatible.
This is my (prior working) php code, I hope someone can help me finding the problem:
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.plugin.plugin');
class plgK2K2RelatedLinks extends JPlugin
{
public function __construct(&$subject, $config)
{
parent::__construct($subject, $config);
}
public function onK2BeforeDisplay(&$item, &$params, $limitstart)
{
$regex = '#{link="(.*?)"}#s';
preg_match_all($regex, $item->text, $matches, PREG_SET_ORDER);
if ($matches) {
foreach ($matches as $match) {
$link = $match[1];
$linkContent = $this->fetchLinkData($link);
if ($linkContent) {
$replacement = '<div class="related-link-thumbnail">'
. '<a href="' . $link . '">'
. '<img src="' . $linkContent . '" alt="' . $linkContent . '"/>'
. '<div class="related-link-text">'
. '<span class="read-also">Læs også</span>'
. '<h2>' . $linkContent . '</h2>'
. '</div>'
. '</a>'
. '</div>';
$item->text = str_replace($match[0], $replacement, $item->text);
} else {
$item->text = str_replace($match[0], '', $item->text);
}
}
}
}
private function fetchLinkData($url)
{
$data = ;
$html = @file_get_contents($url);
if ($html === false) {
error_log('Error fetching data from URL: ' . $url);
return false;
}
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXPath($dom);
$titleNode = $xpath->query('//h1[@class="itemTitle"]')->item(0);
$imageNode = $xpath->query('//meta[@property="og:image"]')->item(0);
if ($titleNode && $imageNode) {
$title = $titleNode->nodeValue;
$title_parts = explode('Skrevet af', $title);
$title = trim($title_parts[0]);
$data = $title;
$data = $imageNode->getAttribute('content');
} else {
error_log('Error parsing data from URL: ' . $url);
return false;
}
return $data;
}
}
?>
Sincerely,
Martin