Verwandte Themen - Crosslinking von Artikeln

Alles rund um Module und Plugins in CONTENIDO 4.9.
McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Verwandte Themen - Crosslinking von Artikeln

Beitrag von McHubi » Di 31. Mär 2015, 09:07

Dieses Modul gibt es auch für die Version 4.10: viewtopic.php?f=116&t=43554


Hallo zusammen,

für die 4.8er hatte ich dieses Modul bereits umgesetzt (http://forum.contenido.org/viewtopic.php?f=60&t=30616) und es konnte mit einer kleinen Anpassung auch für die 4.9er verwendet werden (http://forum.contenido.org/viewtopic.php?f=89&t=34781). Da diese Anpassung mysqli auf das veraltete mysql zurücksetzte, habe ich eine komplett überarbeitete Version - mit neuen Features - erstellt.

Was ermöglicht dieses Modul eigentlich?
Artikeln können Schlagworte zugewiesen werden. Bei der Frontend-Ausgabe wird geschaut, ob auch andere Artikel eines dieser Schlagworte beinhalten. Ist dies der Fall, werden automatisch Verlinkungen zu diesen Artikeln in der Art einer Artikelliste ausgegeben.

Dabei kann gewählt werden, ob diese Verlinkungen lediglich eine Auflistung von Headlines sind oder zusätzlich einen Text-Teaser mit ausgeben. Die Headline der Verlinkung kann dabei auf die H1 oder den Backend-Title des Artikels festgelegt werden. Andere Content-Typen können natürlich auch in der Modul-Ausgabe ergänzt werden. Die Ausgabe erfolgt alphabetisch sortiert.

Features Backend
# Erstellen, Löschen und nachträgliches Umbenennen von Schlagworten
# Zuweisen und Entfernen von Schlagworten
# Übersicht aller Schlagworte inkl. Verlinkung der Artikel
# Übersicht aller mit dem aktuellen Artikel verlinkten weiteren Artikel

Features Frontend
# List- oder Teaser-Style (Anzahl Zeichen des Text-Teasers frei festlegbar)
# Headline beinhaltet Backend-Title oder H1 des verlinkten Artikels
# Auflistung nur, wenn Artikel auch online ist
# Alphabetische Ausgabe

SQL-Statements zum Anlegen der Datenbanktabellen

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `crosslinking_sd_keywords` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `keyword` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
  `idarts` text COLLATE latin1_german1_ci,
  `lang` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `crosslinking_sd_idarts` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `idart` int(11) NOT NULL,
  `lang` int(11) NOT NULL,
  `keywords` text CHARACTER SET latin1 COLLATE latin1_bin,
  PRIMARY KEY (`id`)
)
Modul-Eingabe
Wichtig: die Variable $frontend_url noch anpassen!

Code: Alles auswählen

/***********************************************
* crosslinking_sd input
*
* Author      :     seamless-design Markus Hübner
* Copyright   :     seamless-design Markus Hübner
* Created     :     2015-03-20
************************************************/

$frontend_url='https://www.MEINEDOMAIN.de/cms/front_content.php';
$kw_enter_delete=htmlspecialchars(strip_tags($_POST['kw_enter_delete']));
$kw_keyword=htmlspecialchars(strip_tags($_POST['kw_keyword']));
$kw_assign_remove=htmlspecialchars(strip_tags($_POST['kw_assign_remove']));
$kw_rename_keyword_old=htmlspecialchars(strip_tags($_POST['kw_rename_keyword_old']));
$kw_rename_keyword_new=htmlspecialchars(strip_tags($_POST['kw_rename_keyword_new']));
$show_all_kw=htmlspecialchars(strip_tags($_POST['show_all_kw']));
$show_all_connected_articles=htmlspecialchars(strip_tags($_POST['show_all_connected_articles']));


$array_messages=array();
/*
echo '$kw_enter_delete: '.$kw_enter_delete.'<br/>';
echo '$kw_keyword: '.$kw_keyword.'<br/>';
echo '$kw_assign_remove: '.$kw_assign_remove.'<br/>';
echo '$kw_assign_remove_select: '.$kw_assign_remove_select.'<br/>';
echo '$kw_rename_keyword_old: '.$kw_rename_keyword_old.'<br/>';
echo '$kw_rename_keyword_new: '.$kw_rename_keyword_new.'<br/>';
echo '$show_all_kw: '.$show_all_kw.'<br/>';
echo '$show_all_connected_articles: '.$show_all_connected_articles.'<br/>';
echo '$lang: '.$lang.'<br/>';
*/



/********** FUNCTIONS begin **********/
function array_all_keywords ()
  {
  $array_all_keywords=array();
  $query = "SELECT * FROM crosslinking_sd_keywords ORDER BY keyword";
  $result = cRegistry::getDb();
  $result->query($query);
  while($result->nextRecord())
    {
    $array_row=$result->toArray();
    $array_all_keywords[]=$array_row;
    }
  return $array_all_keywords;
  }
/********** FUNCTIONS end **********/



/********** COLLECTINIG KEYWORD DATA for building options and informations begin **********/
/***** keywords of current article begin *****/
$query = "SELECT * FROM crosslinking_sd_idarts WHERE idart='$idart' AND lang='$lang'";
$result = cRegistry::getDb();
$result->query($query);
while($result->nextRecord())
  {
  $array_row=$result->toArray();
  $keywords_of_idart=$array_row['keywords'];
  }	
$array_keywords_of_idart=explode(';',$keywords_of_idart);
$array_keywords_of_idart=array_filter($array_keywords_of_idart);
asort($array_keywords_of_idart);
/***** keywords of current article end *****/
/***** keywords overall begin *****/
$array_all_keywords=array_all_keywords();
/***** keywords overall end *****/
/********** COLLECTINIG KEYWORD DATA for building options and informations end **********/



/********** DATABASE OPERATIONS begin **********/
/***** keyword enter delete begin *****/
if($kw_enter_delete=="enter" OR $kw_enter_delete=="delete")
  {
  if($kw_keyword=="") $array_messages[]=mi18n("input - message kw enter delete kw empty"); 
    else
	  {
      $kw_already_exists="false";
      $query = "SELECT * FROM crosslinking_sd_keywords WHERE keyword='$kw_keyword' AND lang='$lang'";
      $result = cRegistry::getDb();
      $result->query($query);
      while($result->nextRecord())
	    {
		$array_row=$result->toArray();
		$kw_already_exists="true";
		$kw_idarts=$array_row['idarts'];
		}
/* enter begin */
      if($kw_enter_delete=="enter")
	    {
	    if($kw_already_exists=="false")
          {
	      $insert="INSERT INTO crosslinking_sd_keywords (keyword,lang) VALUES ('$kw_keyword','$lang')";
	      if($insert = $db->query($insert)) $array_messages[]=mi18n("input - message kw enter kw insertation successful");
	        else $array_messages[]=mi18n("input - message kw enter kw insertation failed");
	      }
          else $array_messages[]=mi18n("input - message kw enter kw already exists"); 
		}
/* enter end */		
/* delete begin */
      if($kw_enter_delete=="delete")
	    {
	    if($kw_already_exists=="true")
          {
		  if($kw_idarts=="")
		    {
		    $delete="DELETE FROM crosslinking_sd_keywords WHERE keyword='$kw_keyword' AND lang='$lang'";
		    if($delete = $db->query($delete)) $array_messages[]=mi18n("input - message kw delete kw deletion successful");
              else $array_messages[]=mi18n("input - message kw delete kw deletion failed");
			}
			else
			  {
			  $links_articles="";
			  $array_kw_idarts=explode(";",$kw_idarts);
			  foreach ($array_kw_idarts AS $element)
			    {
				$obj = new cApiArticleLanguage();
	            $obj->loadByArticleAndLanguageId($element,$lang);
	            $headline_h1 = $obj->getContent("htmlhead", 1);
	            $pagetitle = $obj->getField('title');
	            $onlinestatus = $obj->getField('online');
				$links_articles.='idart: <a style="text-decoration: underline;" href="'.$frontend_url.'?idart='.$element.'&lang='.$lang.'" target="_blank">'.$element.'</a> | '.$headline_h1.' ('.$pagetitle.')<br/>';
				}
			  $array_messages[]=mi18n("input - message kw delete kw can not be deleted, it is noted for articles").'<br/>'.$links_articles; 
			  }
	      }
          else $array_messages[]=mi18n("input - message kw delete kw does not exist"); 
		}
/* delete end */				
	  }
  $array_all_keywords=array_all_keywords();
  }
/***** keyword enter delete end *****/



/***** keyword assign remove begin *****/
if($kw_assign_remove!="")
  {
  $query = "SELECT * FROM crosslinking_sd_keywords WHERE keyword='$kw_assign_remove_select' AND lang='$lang'";
  $result = cRegistry::getDb();
  $result->query($query);
  while($result->nextRecord())
	{
	$array_row=$result->toArray();
	$idarts_of_keyword=$array_row['idarts'];
	}	
  $array_idarts_of_keyword=explode(';',$idarts_of_keyword);
  $array_idarts_of_keyword = array_filter($array_idarts_of_keyword); 
  }

/* assign begin */
if($kw_assign_remove=="assign")
  {
  $assign_kw="true"; 
  if(in_array($idart,$array_idarts_of_keyword))
	{
	$array_messages[]=mi18n("input - message kw assign remove - kw already assigned").' crosslinking_sd_keywords';
	$assign_kw="false";
	}	
  if(in_array($kw_assign_remove_select,$array_keywords_of_idart))
	{
	$array_messages[]=mi18n("input - message kw assign remove - kw already assigned").' crosslinking_sd_idarts';
	$assign_kw="false";
	}	
  if($assign_kw=="true")
	{
	if($idarts_of_keyword=="") $idarts_of_keyword=$idart;
	  else $idarts_of_keyword.=';'.$idart;
	$update="UPDATE crosslinking_sd_keywords SET idarts='$idarts_of_keyword' WHERE keyword='$kw_assign_remove_select' AND lang='$lang'";
    if($update = $db->query($update)) $array_messages[]=mi18n("input - message kw assign remove - kw assign successful").' crosslinking_sd_keywords';
	  else $array_messages[]=mi18n("input - message kw assign remove - kw assign failed"). 'crosslinking_sd_keywords';
	if(empty($array_keywords_of_idart))
	  {
	  $keywords_of_idart=$kw_assign_remove_select;	
	  $insert="INSERT INTO crosslinking_sd_idarts (idart,lang,keywords) VALUES ('$idart','$lang','$keywords_of_idart')";
	  if($insert = $db->query($insert)) $array_messages[]=mi18n("input - message kw assign remove - kw assign successful").' crosslinking_sd_idarts';
	    else $array_messages[]=mi18n("input - message kw assign remove - kw assign failed").' crosslinking_sd_idarts';
	  }
	  else
	    {
	    $keywords_of_idart.=';'.$kw_assign_remove_select;	
	    $update="UPDATE crosslinking_sd_idarts SET keywords='$keywords_of_idart' WHERE idart='$idart' AND lang='$lang'";
        if($update = $db->query($update)) $array_messages[]=mi18n("input - message kw assign remove - kw assign successful").' crosslinking_sd_idarts';
	      else $array_messages[]=mi18n("input - message kw assign remove - kw assign failed").' crosslinking_sd_idarts';
		}
	$array_keywords_of_idart=explode(';',$keywords_of_idart);
	}
  $array_all_keywords=array_all_keywords();
  }
/* assign end */  
/* assign remove */
if($kw_assign_remove=="remove")
  {
  $remove_kw="true"; 
  if(!in_array($idart,$array_idarts_of_keyword))
	{
	$array_messages[]=mi18n("input - message kw assign remove - kw not assigned").' crosslinking_sd_keywords';
	$remove_kw="false";
	}	
  if(!in_array($kw_assign_remove_select,$array_keywords_of_idart))
	{
	$array_messages[]=mi18n("input - message kw assign remove - kw not assigned").' crosslinking_sd_idarts';
	$remove_kw="false";
	}	
  if($remove_kw=="true")
	{
	$key = array_search($idart,$array_idarts_of_keyword);
    if($key!==false) unset($array_idarts_of_keyword[$key]);
	$key = array_search($kw_assign_remove_select,$array_keywords_of_idart);
    if($key!==false) unset($array_keywords_of_idart[$key]);
	$array_keywords_of_idart=array_values($array_keywords_of_idart);
	$amount_of_keywords=count($array_keywords_of_idart);
	if($amount_of_keywords>0)
	  {
	  $keywords_of_idart="";
      $i=0;
	  while($i < $amount_of_keywords)
	    {
		$keywords_of_idart.=$array_keywords_of_idart[$i];
		$i++;
		if($i<$amount_of_keywords) $keywords_of_idart.=';';
	    }
	  }
	  else $keywords_of_idart="";
	if($amount_of_keywords>0)
	  {
      $update="UPDATE crosslinking_sd_idarts SET keywords='$keywords_of_idart' WHERE idart='$idart' AND lang='$lang'";
        if($update = $db->query($update)) $array_messages[]=mi18n("input - message kw assign remove - kw remove successful").' crosslinking_sd_idarts';
	      else $array_messages[]=mi18n("input - message kw assign remove - kw remove failed").' crosslinking_sd_idarts';
	  }
      else  // to avoid datacorpses: completely remove information about article - there only would be said: no keywords given. 
	    {
        $delete="DELETE FROM crosslinking_sd_idarts WHERE idart='$idart' AND lang='$lang'";
		if($delete = $db->query($delete)) $array_messages[]=mi18n("input - message kw assign remove - article deletion from database successful, no keywords").' crosslinking_sd_idarts';
          else $array_messages[]=mi18n("input - message kw assign remove - article deletion from database failed, no keywords").' crosslinking_sd_idarts';
		}  
	$key = array_search($idart,$array_idarts_of_keyword);
    if($key!==false) unset($array_idarts_of_keyword[$key]);
	$array_idarts_of_keyword=array_values($array_idarts_of_keyword);
	$amount_of_idarts=count($array_idarts_of_keyword);
	if($amount_of_idarts>0)
	  {
	  $idarts_of_keyword="";
      $i=0;
	  while($i < $amount_of_idarts)
	    {
		$idarts_of_keyword.=$array_idarts_of_keyword[$i];
		$i++;
		if($i<$amount_of_idarts) $idarts_of_keyword.=';';
	    }
	  }
	  else $idarts_of_keyword="";
	$update="UPDATE crosslinking_sd_keywords SET idarts='$idarts_of_keyword' WHERE keyword='$kw_assign_remove_select' AND lang='$lang'";
    if($update = $db->query($update)) $array_messages[]=mi18n("input - message kw assign remove - kw remove successful").' crosslinking_sd_keywords';
	  else $array_messages[]=mi18n("input - message kw assign remove - kw remove failed").' crosslinking_sd_keywords';
	}
  $array_all_keywords=array_all_keywords();
  }
/* remove end */  
/***** keyword assign remove end *****/
/***** keyword rename begin *****/
if($kw_rename_keyword_old!="" AND $kw_rename_keyword_new!="")
  {
  $rename_kw="true";
  foreach($array_all_keywords AS $array)
    {
	if($array['keyword']==$kw_rename_keyword_new)
	  {
	  $array_messages[]=mi18n("input - message kw rename - kw already existing");
	  $rename_kw="false";
	  break;
	  }
	}
  if($rename_kw=="true")
    {
	$update="UPDATE crosslinking_sd_keywords SET keyword='$kw_rename_keyword_new' WHERE keyword='$kw_rename_keyword_old' AND lang='$lang'";
    if($update = $db->query($update)) $array_messages[]=mi18n("input - message kw rename - renaming successful").' crosslinking_sd_keywords';
	  else $array_messages[]=mi18n("input - message kw rename - renaming failed").' crosslinking_sd_keywords';
	$query = "SELECT * FROM crosslinking_sd_idarts WHERE lang='$lang'";
    $result = cRegistry::getDb();
    $result->query($query);
    while($result->nextRecord())
      {
      $array_row=$result->toArray();
      $row_rename_keywords_of_idart=$array_row['keywords'];
	  $row_idart=$array_row['idart'];
	  $array_row_rename_keywords_of_idart=explode(';',$row_rename_keywords_of_idart);
	  if(in_array($kw_rename_keyword_old,$array_row_rename_keywords_of_idart))
	    {
		$key = array_search($kw_rename_keyword_old,$array_row_rename_keywords_of_idart);
        if($key!==false) $array_row_rename_keywords_of_idart[$key]=$kw_rename_keyword_new;
		$amount_of_keywords=count($array_row_rename_keywords_of_idart);
	    $keywords_of_idart="";
        $i=0;
	    while($i < $amount_of_keywords)
	      {
		  $keywords_of_idart.=$array_row_rename_keywords_of_idart[$i];
		  $i++;
		  if($i<$amount_of_keywords) $keywords_of_idart.=';';
	      }
		$update="UPDATE crosslinking_sd_idarts SET keywords='$keywords_of_idart' WHERE idart='$row_idart' AND lang='$lang'";
        if($update = $db->query($update)) $array_messages[]=mi18n("input - message kw rename - renaming successful").' crosslinking_sd_idarts idart: '.$row_idart;
	      else $array_messages[]=mi18n("input - message kw rename - renaming failed").' crosslinking_sd_idarts idart: '.$row_idart;
		if($idart==$row_idart)
		  {
		  $key = array_search($kw_rename_keyword_old,$array_keywords_of_idart);
          if($key!==false) $array_keywords_of_idart[$key]=$kw_rename_keyword_new;
		  }
		}
      }	
    $array_all_keywords=array_all_keywords();
    }
  }
/***** keyword rename end *****/
/********** DATABASE OPERATIONS end **********/



/********** SHOWING MESSAGES begin **********/
if(count($array_messages)>0)
  {
  echo '<div style="background-color: #efefef; padding: 1em;"><ul style="padding-left: 1em;">';
  foreach($array_messages AS $message) echo '<li>'.$message.'</li>'; 
  echo '</ul></div>'; 
  }
/********** SHOWING MESSAGES end **********/



/********** WORKBENCH begin **********/
echo mi18n("input - idart of this article").': '.$idart.'<br/><br/>';
/***** new keyword/ delete keyword begin *****/
echo '<strong>'.mi18n("input - kw enter del headline").'</strong><br/>';
echo '<table><tr>';
echo '<td><input name="kw_keyword" type="text" size="20"></input></td>';
echo '<td><input type="radio" name="kw_enter_delete" value="enter"> '.mi18n("input - kw enter delete enter").'<br/>';
echo '<input type="radio" name="kw_enter_delete" value="delete"> '.mi18n("input - kw enter delete delete").'</td>';
echo '<td><input type="image" src="images/submit.gif"></td>';
echo '</tr></table>';
/***** new keyword/ delete keyword begin *****/



/***** assign remove keyword begin *****/
echo '<strong>'.mi18n("input - kw assign remove headline").'</strong><br/>';
echo '<table><tr>';
echo '<td><select name="kw_assign_remove_select">';
echo '<option value="">---?---</option>';
foreach ($array_all_keywords as $keyword) {
echo '<option value="'.$keyword[keyword].'">'.$keyword[keyword].'</option>';
}
echo '</select></td>';
echo '<td><input type="radio" name="kw_assign_remove" value="assign"> '.mi18n("input - kw assign remove - assign").'<br/>';
echo '<input type="radio" name="kw_assign_remove" value="remove"> '.mi18n("input - kw assign remove - remove").'</td>';
echo '<td><input type="image" src="images/submit.gif"></td>';
echo '</tr></table>';
/***** assign remove keyword end *****/



/***** rename keyword begin *****/
echo '<strong>'.mi18n("input - kw rename headline").'</strong><br/>';
echo '<table><tr>';
echo '<td>'.mi18n("input - kw rename kw old").'</td><td>'.mi18n("input - kw rename kw new").'</td><td></td></tr>';
echo '<tr>';
echo '<td><select name="kw_rename_keyword_old">';
echo '<option value="">---?---</option>';
foreach ($array_all_keywords as $keyword) {
echo '<option value="'.$keyword[keyword].'">'.$keyword[keyword].'</option>';
}
echo '</select></td>';
echo '<td><input name="kw_rename_keyword_new" type="text" size="20"></input></td>';
echo '<td><input type="image" src="images/submit.gif"></td>';
echo '</tr></table>';
/***** rename keyword end *****/



/***** list all keywords assigned to aricle begin *****/
echo '<strong>'.mi18n("input - list all kw assigned to article headline").'</strong><br/>';
if(count($array_keywords_of_idart)>0)
  {
  asort($array_keywords_of_idart);
  foreach($array_keywords_of_idart AS $keyword) echo '<span style="background-color: #ffffff; border: 1px solid #999999; padding: 0.1em;margin-right: 0.5em; font-size: 0.8em;">'.$keyword.'</span>';
  }
  else echo mi18n("input - no keywords assigned to article");
/***** list all keywords assigned to aricle end *****/



/***** list all keywords begin *****/
echo '<br/><br/><strong>'.mi18n("input - all kw headline").'</strong> ';
echo '<input type="checkbox" name="show_all_kw" value="true"';
if($show_all_kw=="true") echo ' checked="checked"';
echo '/> <input type="image" src="images/submit.gif"><br/>';
if($show_all_kw=="true")
  {
  echo '<table style="border-collapse: collapse;">';
  echo '<tr><td style="padding:0.1em;border: 1px solid #999999;">'.mi18n("input - all kw keyword").'</td><td style="padding:0.1em;border: 1px solid #999999;">'.mi18n("input - all kw idarts").'</td><td style="padding:0.1em;border: 1px solid #999999;">'.mi18n("input - all kw amount joined idarts").'</td></tr>';
  foreach($array_all_keywords AS $keyword)
    {
    echo '<tr><td style="padding:0.1em;">'.$keyword['keyword'].'</td><td style="padding:0.1em;">';
	$array_kw_idarts=explode(";",$keyword['idarts']);
	asort($array_kw_idarts);
	$array_kw_idarts = array_filter($array_kw_idarts);
    foreach ($array_kw_idarts AS $element) echo '<a style="text-decoration: underline;" href="'.$frontend_url.'?idart='.$element.'&lang='.$lang.'" target="_blank">'.$element.'</a>&nbsp;|&nbsp;';
	echo '</td><td style="padding:0.1em;">';
	echo count($array_kw_idarts);
	echo '</td></tr>';
    }
  echo '</table>';
  }
/***** list all keywords  end *****/



/***** list all connected articles begin *****/
echo '<br/><br/><strong>'.mi18n("input - all connected articles headline").'</strong> ';
echo '<input type="checkbox" name="show_all_connected_articles" value="true"';
if($show_all_connected_articles=="true") echo ' checked="checked"';
echo '/> <input type="image" src="images/submit.gif"><br/>';
if($show_all_connected_articles=="true")
  {
  $array_connected_articles=array();
  foreach($array_keywords_of_idart AS $keyword)
    {
	$query = "SELECT * FROM crosslinking_sd_keywords WHERE keyword='$keyword' AND lang='$lang'";
    $result = cRegistry::getDb();
    $result->query($query);
    while($result->nextRecord())
      {
      $array_row=$result->toArray();
	  $array_idarts_of_keyword=explode(';',$array_row['idarts']);
	  $array_connected_articles=array_merge($array_idarts_of_keyword,$array_connected_articles);
	  }
	}
  $array_connected_articles=array_unique($array_connected_articles);
  asort($array_connected_articles);
  echo '<table style="border-collapse: collapse;">';
  echo '<tr>
        <td style="padding:0.1em;border: 1px solid #999999;">'.mi18n("input - all connected articles idart").'</td>
		<td colspan="2" style="padding:0.1em;border: 1px solid #999999;">'.mi18n("input - all connected articles h1 backend title").'</td>
		<td style="padding:0.1em;border: 1px solid #999999;">'.mi18n("input - all connected articles online-status").'</td>
		</tr>';
  foreach($array_connected_articles AS $article_idart)
    {
	if($article_idart!=$idart)
	  {
	  //http://api.contenido.org/con495/class-cApiArticleLanguage.html
	  $obj = new cApiArticleLanguage();
	  $obj->loadByArticleAndLanguageId($article_idart,$lang);
	  $headline_h1 = $obj->getContent("htmlhead", 1);
	  $pagetitle = $obj->getField('title');
	  $onlinestatus = $obj->getField('online');
	  echo '<tr><td><a style="text-decoration: underline;" href="'.$frontend_url.'?idart='.$article_idart.'&lang='.$lang.'" target="_blank">'.$article_idart.'</a></td><td>H1:<br/>Backend-Title:</td><td>'.$headline_h1.'<br/>'.$pagetitle.'</td><td>'.$onlinestatus.'</td></tr>';
	  }
	}
  echo '</table>';
  }
/***** list all connected articles end *****/
/********** WORKBENCH end **********/
Modul-Ausgabe

Code: Alles auswählen

<?php
/***********************************************
* crosslinking_sd output
*
* Author      :     seamless-design Markus Hübner
* Copyright   :     seamless-design Markus Hübner
* Created     :     2015-03-20
************************************************/

//$display_by="backend_title";
$display_by="headline_h1";
$show_teaser="true"; // true or false
$teaser_length=200;

$query = "SELECT keywords FROM crosslinking_sd_idarts WHERE idart='$idart' AND lang='$lang'";
$result = cRegistry::getDb();
$result->query($query);
while($result->nextRecord())
  {
  $array_row=$result->toArray();
  $keywords_of_idart=$array_row['keywords'];
  }	
$array_keywords_of_idart=explode(';',$keywords_of_idart);
$array_keywords_of_idart=array_filter($array_keywords_of_idart);

if(count($array_keywords_of_idart)>0)
  {
  $array_connected_articles=array();
  foreach($array_keywords_of_idart AS $keyword)
    {
	$query = "SELECT idarts FROM crosslinking_sd_keywords WHERE keyword='$keyword' AND lang='$lang'";
    $result = cRegistry::getDb();
    $result->query($query);
    while($result->nextRecord())
      {
      $array_row=$result->toArray();
	  $array_idarts_of_keyword=explode(';',$array_row['idarts']);
	  $array_connected_articles=array_merge($array_idarts_of_keyword,$array_connected_articles);
	  }
	}
  $array_connected_articles=array_unique($array_connected_articles);
	  if(count($array_connected_articles)>1) // 1: if the current article got a keyword, it will always be within this array - but will not be displayed afterwards. so there has be be at least one more article in this array.
  {
  $array_display_connected_articles=array();
  $article_key=1; // needed for unique key in array, if two or more articles have same headline or backend-title!
  foreach($array_connected_articles AS $article_idart)
    {
	if($article_idart!=$idart)
	  {
	  //http://api.contenido.org/con495/class-cApiArticleLanguage.html
	  $obj = new cApiArticleLanguage();
	  $obj->loadByArticleAndLanguageId($article_idart,$lang);
	  $headline_h1 = $obj->getContent("htmlhead", 1);
	  $pagetitle = $obj->getField('title');
	  $onlinestatus = $obj->getField('online');
	  $html_1 = $obj->getContent("html", 1);
      if($onlinestatus=="1")
	    {
	    if($display_by=="headline_h1") $array_display_connected_articles[$headline_h1.'_'.$article_key]=array($article_idart,$headline_h1,$html_1);
	    if($display_by=="backend_title") $array_display_connected_articles[$pagetitle.'_'.$article_key]=array($article_idart,$pagetitle,$html_1);
	    }
      $article_key++;
	  }
	}
  ksort($array_display_connected_articles);
  echo '<div class="cl_sd_box_links">';
  echo '<h3>'.mi18n("output - linkbox headline").'</h3>';
  if($show_teaser=="true")
    {
    foreach($array_display_connected_articles AS $link_article)
      {
	  echo '<div class="cl_sd_box_links_item">';
        echo '<a href="front_content.php?idart='.$link_article[0].'&lang='.$lang.'">'.$link_article[1].'</a>';
	    echo '<div class="cl_sd_box_links_item_teaser">';
	    echo substr(strip_tags($link_article[2]),0,$teaser_length).'...';
	    echo '</div>';
	  echo '</div>';
	  }
	}
    else
	  {
	  echo '<ul>';
	  foreach($array_display_connected_articles AS $link_article) echo '<li><a href="front_content.php?idart='.$link_article[0].'&lang='.$lang.'">'.$link_article[1].'</a></li>';
	  echo '</ul>';
      }
  echo '</div>';
  }
  }
?>
CSS

Code: Alles auswählen

div.cl_sd_box_links {
clear: both;
margin-top: 2em;
}
div.cl_sd_box_links_item {
margin-top: 0.5em;
padding: 0.5em;
border: 1px solid #999999;
}
div.cl_sd_box_links_item a {
color: #000000;
}
div.cl_sd_box_links_item a:hover {
color: #ff0000;
}
div.cl_sd_box_links_item_teaser {
font-size: 0.9em;
}

div.cl_sd_box_links ul li a {
color: #000000;
text-decoration: none;
}
div.cl_sd_box_links ul li a:hover {
color: #ff0000;
text-decoration: underline;
}
lang_de_DE.txt

Code: Alles auswählen

input - all connected articles h1 backend title=H1 und Backend-Title
input - all connected articles headline=Übersicht aller mit diesem Artikel verknüpften Artikel
input - all connected articles idart=idart
input - all connected articles online-status=1: online / 0: offline (im Frontend nicht verlinkt)
input - all kw amount joined idarts=Verknüpfte Artikel
input - all kw headline=Übersicht aller Schlagworte
input - all kw idarts=idarts der Webartikel
input - all kw keyword=Schlagwort
input - idart of this article=idart dieses Artikels
input - kw assign remove - assign=zuweisen
input - kw assign remove - remove=entfernen
input - kw assign remove headline=Schlagwort zuweisen oder entfernen
input - kw enter del headline=Schlagwort eintragen/löschen
input - kw enter delete delete=löschen
input - kw enter delete enter=eintragen
input - kw rename headline=Schlagwort umbenennen
input - kw rename kw new=neu
input - kw rename kw old=alt
input - list all kw assigned to article headline=Alle diesem Artikel zugewiesenen Schlagworte.
input - message kw assign remove - article deletion from database failed, no keywords=Artikel hat keine Schlagworte mehr zugewiesen. Entfernung aus Datenbanktabelle zu Schlagworten fehlgeschlagen.
input - message kw assign remove - article deletion from database successful, no keywords=Artikel hat keine Schlagworte mehr zugewiesen. Entfernung aus Datenbanktabelle zu Schlagworten erfolgreich.
input - message kw assign remove - kw already assigned=Das Schlagwort ist dem Artikel bereits zugewiesen.
input - message kw assign remove - kw assign failed=Zuordnung des Schlagwortes fehlgeschlagen.
input - message kw assign remove - kw assign successful=Zuordnung des Schlagwortes war erfolgreich.
input - message kw assign remove - kw not assigned=Schlagwort wurde dem Artikel noch nicht zugeordnet, Aufhebung nicht möglich.
input - message kw assign remove - kw remove failed=Aufheben der Schlagwortzuordnung fehlgeschlagen.
input - message kw assign remove - kw remove successful=Aufheben der Schlagwortzuordnung war erfolgreich.
input - message kw delete kw can not be deleted, it is noted for articles=Das Schlagwort kann nicht gelöscht werden. Es ist einem oder mehreren Artikeln zugeordnet:
input - message kw delete kw deletion failed=Löschen des Schlagworts fehlgeschlagen.
input - message kw delete kw deletion successful=Löschen des Schlagworts war erfolgreich.
input - message kw delete kw does not exist=Das zu löschende Schlagwort existiert nicht.
input - message kw enter delete kw empty=Bitte geben Sie ein einzutragendes oder zu löschendes Schlagwort ein.
input - message kw enter kw already exists=Schlagwort wurde nicht eingetragen, es existiert bereits.
input - message kw enter kw insertation failed=Die Eintragung des Schlagworts ist fehlgeschlagen.
input - message kw enter kw insertation successful=Die Eintragung des Schlagworts war erfolgreich.
input - message kw rename - kw already existing=Das Schlagworte kann nicht umbenannt werden. Es existiert bereits ein Schlagwort mit dieser Bezeichnung.
input - message kw rename - renaming failed=Umbenennung des Schlagwortes fehlgeschlagen.
input - message kw rename - renaming successful=Umbenennung des Schlagwortes erfolgreich.
input - no keywords assigned to article=Bisher wurden diesem Artikel keine Schlagworte zugewiesen.
output - linkbox headline=Verwandte Themen
Dateianhänge
crosslinking_sd-fe-001.jpg
crosslinking_sd-fe-001.jpg (143.98 KiB) 9952 mal betrachtet
crosslinking_sd-be-001.jpg
crosslinking_sd-be-001.jpg (153 KiB) 9952 mal betrachtet
Zuletzt geändert von McHubi am Mi 24. Apr 2019, 21:05, insgesamt 1-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Faar » Di 31. Mär 2015, 09:36

Die sogenannte "Content Allocation" (seltsamer Ausdruck :roll: ) ist doch eine Verschlagwortung, ein wenig ähnlich wie die Tags in Wordpress.
Man kommt bei Contenido nur nicht so einfach dran an die Tags wie bei Wordpress :evil:

Wäre es da nicht ausreichend gewesen, nur diese Schlagworte auszulesen und die Artikel zu verknüpfen?
Oder funktioniert das doch noch anders?
Dein Modul erzeugt nun eine eigene Tabelle für Schlagworte und liest die dann mitsamt Artikeln aus.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Oldperl » Di 31. Mär 2015, 10:18

Ja das Content-Allocation-Plugin war ursprünglich für die Verschlagwortung gedacht. Nachteil von CA ist aber, das die Schlagworte nur im Plugin vorgegeben werden können, ein Hinzufügen direkt im Artikel wie bei Word ist nicht möglich. Auch gibt es nur ganz wenige Artikellistenmodule die mit der CA können (zumeist keine OpenSource). Ich selbst habe CA zuletzt bei einem Auftrag zu http://wbw.ch genutzt um dort die Artikel den Jahren und Monaten zuordnen zu können.

Das Modul von Markus ermöglicht die Eingabe von Schlagworten im Artikelbereich, wobei es eine eigene Verschlagwortung (DB-Tabellen) nutzt. Sicherlich hätte man auch die CA entsprechend "aufbohren" und ein auf dem Plugin basierendes Modul schreiben können. Wobei sich die Frage stellt mit welchem Zeitaufwand für Einarbeitung ins Plugin dies verbunden ist, zumal auch die Doku zum Plugin recht dürftig ist. Zumindest würde ich persönlich bei Modulen die zusätzliche DB-Tabellen nutzen oder benötigen, diese Tabelle über ein Plugin anlegen lassen, da CONTENIDO bisher noch keinen speziellen Handler für DB-Tabellen in Modulen hat.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von McHubi » Di 31. Mär 2015, 10:23

Die sogenannte "Content Allocation" (seltsamer Ausdruck :roll: ) ist doch eine Verschlagwortung, ein wenig ähnlich wie die Tags in Wordpress. ... Wäre es da nicht ausreichend gewesen, nur diese Schlagworte auszulesen und die Artikel zu verknüpfen?
Ginge auch, klar. Das Plugin "Tagging" könnte man ebenso nutzen. Die bei der Installation des Plugins hinzukommenden DB-Tabellen con_pica_alloc, con_pica_alloc_con und con_pica_lang sind letztlich ähnlich zu "meinen" DB-Tabellen. Was mich nur wundert, ist, dass es kein Modul gibt, was auf diese Verknüpfungen zugreift. Das müsste noch geschrieben werden (mache ich bei Gelegenheit vielleicht auch noch :wink: ). Oder hab ich das übersehen?

Hinzu kommt, dass der Reiter "Tagging" in meinen Augen zu wenig Auskünfte gibt. Es werden z. B. zwar alle Schlagworte des aktuellen Artikels angezeigt, aber nicht, mit wie vielen und - vor allem - welchen Artikeln dieser verknüpft ist. Das ist besonders im Plugin selbst ganz übel, denn dort kann ein Schlagwort gelöscht werden ohne dass sichtbar ist, ob es in Benutzung ist! Den Punkt berücksichtigt dagegen mein Modul wieder. Gut, das Tagging-Plugin hat dafür die Möglichkeit, Schlagworte in Gruppen und Untergruppen zu bilden. Es fehlt jedoch an - in meinen Augen - grundlegenden Features, wie es auch im Plugin "Benutzer-Forum" der Fall ist/war (http://forum.contenido.org/viewtopic.ph ... 60#p165419). @4fb: Es gibt also was zu tun... :mrgreen:

Letztlich ist es ähnlich der Bildergalerien oder Artikellisten, die auch mehr als einmal umgesetzt wurden: Viele Wege führen zum Ziel. Der eine mag den, der andere den. :wink:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Oldperl » Di 31. Mär 2015, 10:49

McHubi hat geschrieben:@4fb: Es gibt also was zu tun... :mrgreen:
Naja Markus, ich denke da ist nicht nur 4fb gefragt. Die "schmeissen" eine Ihrer Ideen in Form eines Plugins mit ins System, ich denke aber ohne dabei Vollständigkeit oder Usibilty in allen Bereichen abdecken zu könnenund zu wollen. Das geht aber den meisten Entwicklern so. Hier ist denke ich genauso die Communitiy im Boot. Diese sollte nicht nur immer auf Verbesserungen und Fehler hinweisen, sondern wenn möglich auch entsprechenden (Code-) Vorschläge machen. Alternativ kann man ja sogar beim neuen PIM das Plugin selbst auf Basis des ursprünglichen erweitern und zur Verfügung stellen.
Ich gebe Dir aber Recht das viele Wege nach Rom führen, wobei sich aber manchmal schon die Frage stellt, warum jeder seinen eigenen nimmt, wo man doch in der Gruppe viel besser und schneller voran käme.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Faar » Di 31. Mär 2015, 11:01

McHubi hat geschrieben:Das müsste noch geschrieben werden (mache ich bei Gelegenheit vielleicht auch noch :wink: ). Oder hab ich das übersehen?
Es gibt für Contenido dieses Shop-Plugin oder -Modul für die Anbindung an die Oxid-Shopsoftware.
Das nützt meines Wissens die Content-Allocation.
http://oxidcms.com/landingpage/cms/deut ... index.html
http://wiki.oxidforge.org/Tutorials/de/OXID2CON
Hinzu kommt, ... zu wenig Auskünfte ... aber nicht, mit wie vielen ... welchen Artikeln ... ohne dass sichtbar ist...
Das Plugin ist ganz sicher verbesserungswürdig. Ich hab noch so schwach in Erinnerung, dass damals die Content-Allocation nur für die Shop-Anknüpfung entwickelt wurde und nicht für den Normalgebrauch.
Das heißt, mittels dieses Plugins wurde das System nur von Fachleuten eingerichtet und verwaltet.
An Otto-Normaluserin die einfach ihre Artikel taggen will und das irgendwo als Tagcloud anzeigen lassen will, dachte man dabei wohl nicht und war wohl nicht geplant.
Das könnte man insofern ändern, wenn es ein Standard-Modul gäbe, das diese Tags sinnvoll abgreift und verlinkt anzeigt.
Den Punkt berücksichtigt dagegen mein Modul wieder
Könnte man (also Du) Dein Modul an dieses Plugin oder bzw. an diese Daten anpassen?
Letztlich ist es ähnlich der Bildergalerien
Die Bildergalerie hatte ich ja auch aufgebohrt und angepasst, weil damals in der Standardfunktion noch einiges nicht vorhanden war, was nötig schien. Angefangen bei den Metadaten der Bilder.
oder Artikellisten
Funomat hatte freundlicherweise die Artikelliste Advanced übernommen und weiter entwickelt.
Aber das lief dann in die Richtung eierlegende Wollmlichsau die nicht mehr einfach anzupassen war, manchmal gar nicht erst lief.
Was vielen geholfen hätte würde, ist das Wissen, dass er einen Beispielartikel im Systemordner erstellt hat, der dann dem Modul als Beispiel diente.
Damit lief es dann deutlich problemloser.

Für einfacherer Newslisten hab ich mir die Standard-News aufgebohrt, allerdings fehlt hier bei mir noch das Paging, nehme ich mir oft vor, das noch einzubauen. :roll:

Bei den Menümodulen ist es ja ähnlich, ich habe für die 4.8.x meistens das von Kummer im Einsatz (Das Kummer-Menü :wink: ), aber als getrenntes Menü, so dass ich die Kategorie-Ebenen an verschiedenen Stellen einbauen kann.
Bei 4.9.x mangelte es ja auch an dieser Fähigkeit, so dass ich mir immer noch überlege, das Kummer-Menü auf die 4.9.x zu portieren.

Contenido wäre um einiges reicher, würde man alles finden was es gibt.
Kurzum, es fehlt ein Repository für Module und Plugins! :twisted:
Viele Wege führen zum Ziel
Meistens entsteht es ja aus einem Kundenwunsch oder eigenen Bedürfnissen, dass man anfängt, etwas Eigenes aus dem Vorhandenen zu machen.
Ich fand früher mal die Standard-Module als zu wenig ausgebaut aber eigentlich ist es genau das, was man braucht: Standards.
Aus diesen Standards kann dann jeder selbst etwas spezielles machen, so er denn in der Lage ist.
Mit der Verschachtelung der Module in Klassen und die Funktionsauslagerung in Smarty bin ich nicht so glücklich.
Ich finde, es macht Anpassungen deutlich schwieriger.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von McHubi » Di 31. Mär 2015, 11:07

Hier ist denke ich genauso die Communitiy im Boot.
Richtig.
Was mich nur wundert, ist, dass es kein Modul gibt, was auf diese Verknüpfungen zugreift. Das müsste noch geschrieben werden (mache ich bei Gelegenheit vielleicht auch noch :wink: )
Ich sitze schon im Boot... :mrgreen:
Alternativ kann man ja sogar beim neuen PIM das Plugin selbst auf Basis des ursprünglichen erweitern und zur Verfügung stellen.
Wobei sich die Frage stellt mit welchem Zeitaufwand für Einarbeitung ins Plugin dies verbunden ist, zumal auch die Doku zum Plugin recht dürftig ist.
Deshalb hatte ich beim Benutzer-Forum ja auch im entsprechenden Thema einen Hinweis an 4fb untergebracht, der für die 4.9.7 wohl auch umgesetzt wurde (Danke Frederic!). Nichts desto trotz habe ich weiterhin mein eigenes Kommentarmodul für die 4.9er.

Ich gebe Dir aber Recht, dass es grundsätzlich besser ist, Systemkomponenten soweit feinzutunen, dass sie in der Praxis im Gros der Fälle direkt einsetzbar sind. Nur finde ich es da in der Tat besser, wenn die Vorschläge und Ideen aus der Community kommen aber von 4fb umgesetzt werden. Denn dann wird dabei das "ganze" Contenido berücksichtigt inkl. noch unbekannter, kommender geplanter Änderungen neuerer Releases - von denen wir Communityler noch gar nichts wissen. Es sei denn, man kennt das System bis in kleinste Ecken.
Könnte man (also Du) Dein Modul an dieses Plugin oder bzw. an diese Daten anpassen?
Müsste ich mir mal ansehen. Grundsätzlich ja, die DB-Tabellen sollten einer ähnlichen "Datenhinterlege"-Logik folgen wie meine. Was ein Stolperstein werden könnte, ist die verschachtelte Hinterlegung von Schlagworten.
Zuletzt geändert von McHubi am Di 31. Mär 2015, 11:20, insgesamt 2-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Faar » Di 31. Mär 2015, 11:08

Oldperl hat geschrieben:... warum jeder seinen eigenen nimmt, wo man doch in der Gruppe viel besser und schneller voran käme.
Du schlägst also vor, dass eine Gruppe individueller Entwickler (und oft auch Egozentriker) sich über das Internet zusammensetzt und Gemeinschaftssinn entwickelt und sich einem gemeinsamen Ziel und Level anpassen soll? :lol:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von McHubi » Di 31. Mär 2015, 11:12

Offtopic! :wink: Ich hab einfach mal mein Posting hier erweitert: http://forum.contenido.org/viewtopic.ph ... 13#p165843 Und da könnt ihr dann weiter über dieses Thema sprechen... :wink:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

dermicha
Beiträge: 95
Registriert: Mi 9. Dez 2009, 17:57
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von dermicha » Fr 8. Mai 2015, 12:54

Hallo zusammen,

nur zur Info: Die Aricle List Reloaded (http://forum.contenido.org/viewtopic.php?f=89&t=34196) kann statt auf Kategorien auch auf Content Allocation / Tagging zugreifen und daraus Artikellisten ausgeben.

Grüße
Michael

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Faar » Do 25. Feb 2016, 17:51

Bei mir kommt das für den Input Bereich:

Code: Alles auswählen

Fehler im Modul. Fehlerquelle: Parse error: syntax error, unexpected $end on line 468
Lief das schon mal bei jemandem?
Und der Parser kommt nicht damit klar, dass am Anfang kein ?><?php steht.
:(
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von McHubi » Fr 26. Feb 2016, 14:26

Hallo Faar,
Lief das schon mal bei jemandem?
Ja, mehrfach und zuverlässig. Sonst würde ich das Modul hier nicht posten :wink:
Fehler im Modul. Fehlerquelle: Parse error: syntax error, unexpected $end on line 468
Der Code vom Input hat nur 464 Zeilen. Hat sich da beim Einfügen irgendwas dazwischen geschummelt?
Und der Parser kommt nicht damit klar, dass am Anfang kein ?><?php steht.
Hast Du's mal ergänzt? -> Änderungen?

Welche Version von Contenido nutzt Du?
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Faar » Fr 26. Feb 2016, 15:41

Hallo McHbbi,

der Parser erkennt den Code nicht, wenn kein <?php am Anfang steht. Dann tue ich mich schwer, den Code zu durchsuchen.
Mach ich am Anfang dann ein <?php bzw. ?><?php hin, dann kommt der Fehler.
Es kann auch sein, dass der Parser über eine < Klammer stolpert.

Ich habe 4.9.9
Noch kann ich nicht testen, ob es läuft, weil das Projekt ganz am Anfang ist, ohne Inhalte.

VG,
Faar
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von McHubi » Fr 26. Feb 2016, 16:04

der Parser erkennt den Code nicht
Blöde Nachfrage: Wo genau erscheint jetzt die von Dir genannte Fehlermeldung? Wenn Du den Modulcode selbst siehst im Inputbereich (unter style -> module -> crosslinking_sd) oder wenn Du den Konfigurationsreiter des Webartikels öffnest (content -> artikel -> meinartikel -> Konfiguration)?

Im Moment habe ich noch keine 4.9.9 mit eingebundenem Crosslinking. Demnächst kommen aber ein paar Updates.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Verwandte Themen - Crosslinking von Artikeln

Beitrag von Faar » Fr 26. Feb 2016, 16:26

Wenn du den Modulcode mit Copy&Paste in den Input-Bereich einfügst, dann sind doch links davon so blaue Buttons mit einer Ampel (rot grün).
Das ist von diesem Syntax-Parser, der den eingetragenen Code prüft.
Ohne ?><?php bleibt der Text schwarz, weil der Parser ihn nicht als PHP Code erkennt.
Füge ich ?><?php und am Ende ?> hinzu, dann schaltet die Ampel auf rot und zeit diesen Fehler an (bei Mouseover).
Dateianhänge
Crosslinking0001.jpg
Crosslinking
Crosslinking0001.jpg (112.49 KiB) 8909 mal betrachtet
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten