293 Zeilen
9.5 KiB
PHP
293 Zeilen
9.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Project:
|
|
* ConLite CMS
|
|
*
|
|
* Description:
|
|
* Generate metatags for current article if they are not set in article properties
|
|
*
|
|
* @package ConLite Core
|
|
* @subpackage Chains
|
|
* @version $Id$:
|
|
* @author Ortwin Pinke
|
|
*
|
|
* based on CONTENIDO 4.8.15 [2011-07-31]
|
|
* @author Andreas Lindner, Unknown
|
|
* @copyright four for business AG <www.4fb.de>
|
|
* @license http://www.contenido.org/license/LIZENZ.txt
|
|
* @link http://www.4fb.de
|
|
* @link http://www.contenido.org
|
|
*
|
|
*/
|
|
/**
|
|
* No direct call
|
|
*/
|
|
if (!defined('CON_FRAMEWORK')) {
|
|
die('Illegal call');
|
|
}
|
|
|
|
|
|
cInclude("plugins", "chains/createmetatags/includes/keyword_density.php");
|
|
cInclude("plugins", "chains/createmetatags/classes/class.metatag.creator.html5.php");
|
|
|
|
function cecCreateMetatags($metatags) {
|
|
|
|
global $cfg, $lang, $idart, $client, $cfgClient, $idcat, $idartlang;
|
|
|
|
$bIsHTML5 = ((getEffectiveSetting('generator', 'html5', 'false') == 'false') ? false : true);
|
|
|
|
if ($bIsHTML5) {
|
|
$aConfig = array(
|
|
'cachetime' => 3600,
|
|
'cachedir' => $cfgClient[$client]['path']['frontend'] . "cache/"
|
|
);
|
|
|
|
$oHtml5MetaCreator = new MetaTagCreatorHtml5($metatags, $aConfig);
|
|
return $oHtml5MetaCreator->generateMetaTags();
|
|
}
|
|
|
|
//Basic settings
|
|
$cachetime = 3600; // measured in seconds
|
|
$cachedir = $cfgClient[$client]['path']['frontend'] . "cache/";
|
|
|
|
if (!is_array($metatags)) {
|
|
$metatags = array();
|
|
}
|
|
|
|
$hash = 'metatag_' . md5($idart . '/' . $lang);
|
|
$cachefilename = $cachedir . $hash . '.tmp';
|
|
|
|
#Check if rebuilding of metatags is necessary
|
|
$reload = true;
|
|
|
|
$fileexists = false;
|
|
|
|
if (file_exists($cachefilename)) {
|
|
$fileexists = true;
|
|
|
|
$diff = time() - filemtime($cachefilename);
|
|
|
|
if ($diff > $cachetime) {
|
|
$reload = true;
|
|
} else {
|
|
$reload = false;
|
|
}
|
|
}
|
|
|
|
if ($reload) {
|
|
//(Re)build metatags
|
|
$db = new DB_ConLite();
|
|
|
|
#Get encoding
|
|
$sql = "SELECT * FROM " . $cfg['tab']['lang'] . " WHERE idlang=" . (int) $lang;
|
|
$db->query($sql);
|
|
if ($db->next_record()) {
|
|
$sEncoding = strtoupper($db->f('encoding'));
|
|
} else {
|
|
$sEncoding = "ISO-8859-1";
|
|
}
|
|
|
|
#Get idcat of homepage
|
|
$sql = "SELECT a.idcat
|
|
FROM
|
|
" . $cfg['tab']['cat_tree'] . " AS a,
|
|
" . $cfg['tab']['cat_lang'] . " AS b
|
|
WHERE
|
|
(a.idcat = b.idcat) AND
|
|
(b.visible = 1) AND
|
|
(b.idlang = " . Contenido_Security::toInteger($lang) . ")
|
|
ORDER BY a.idtree LIMIT 1";
|
|
|
|
$db->query($sql);
|
|
|
|
if ($db->next_record()) {
|
|
$idcat_homepage = $db->f('idcat');
|
|
}
|
|
|
|
$availableTags = conGetAvailableMetaTagTypes();
|
|
|
|
#Get first headline and first text for current article
|
|
$oArt = new Article($idart, $client, $lang);
|
|
|
|
#Set idartlang, if not set
|
|
if ($idartlang == '') {
|
|
$idartlang = $oArt->getIdArtLang();
|
|
}
|
|
|
|
$arrHead1 = $oArt->getContent("htmlhead");
|
|
$arrHead2 = $oArt->getContent("head");
|
|
|
|
if (!is_array($arrHead1)) {
|
|
$arrHead1 = array();
|
|
}
|
|
|
|
if (!is_array($arrHead2)) {
|
|
$arrHead2 = array();
|
|
}
|
|
|
|
$arrHeadlines = array_merge($arrHead1, $arrHead2);
|
|
|
|
foreach ($arrHeadlines as $key => $value) {
|
|
if ($value != '') {
|
|
$sHeadline = $value;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$sHeadline = strip_tags($sHeadline);
|
|
$sHeadline = substr(str_replace(chr(13) . chr(10), ' ', $sHeadline), 0, 100);
|
|
|
|
$arrText1 = $oArt->getContent("html");
|
|
$arrText2 = $oArt->getContent("text");
|
|
|
|
if (!is_array($arrText1)) {
|
|
$arrText1 = array();
|
|
}
|
|
|
|
if (!is_array($arrText2)) {
|
|
$arrText2 = array();
|
|
}
|
|
|
|
$arrText = array_merge($arrText1, $arrText2);
|
|
|
|
foreach ($arrText as $key => $value) {
|
|
if ($value != '') {
|
|
$sText = $value;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$sText = strip_tags(urldecode($sText));
|
|
$sText = keywordDensity('', $sText);
|
|
|
|
//Get metatags for homeapge
|
|
$arrHomepageMetaTags = array();
|
|
|
|
$sql = "SELECT startidartlang FROM " . $cfg["tab"]["cat_lang"] . " WHERE (idcat=" . Contenido_Security::toInteger($idcat_homepage) . ") AND(idlang=" . Contenido_Security::toInteger($lang) . ")";
|
|
$db->query($sql);
|
|
|
|
if ($db->next_record()) {
|
|
$iIdArtLangHomepage = $db->f('startidartlang');
|
|
|
|
#get idart of homepage
|
|
$sql = "SELECT idart FROM " . $cfg["tab"]["art_lang"] . " WHERE idartlang =" . Contenido_Security::toInteger($iIdArtLangHomepage);
|
|
|
|
$db->query($sql);
|
|
|
|
if ($db->next_record()) {
|
|
$iIdArtHomepage = $db->f('idart');
|
|
}
|
|
|
|
$t1 = $cfg["tab"]["meta_tag"];
|
|
$t2 = $cfg["tab"]["meta_type"];
|
|
|
|
$sql = "SELECT " . $t1 . ".metavalue," . $t2 . ".metatype FROM " . $t1 .
|
|
" INNER JOIN " . $t2 . " ON " . $t1 . ".idmetatype = " . $t2 . ".idmetatype WHERE " .
|
|
$t1 . ".idartlang =" . $iIdArtLangHomepage .
|
|
" ORDER BY " . $t2 . ".metatype";
|
|
|
|
$db->query($sql);
|
|
|
|
while ($db->next_record()) {
|
|
$arrHomepageMetaTags[$db->f("metatype")] = $db->f("metavalue");
|
|
}
|
|
|
|
$oArt = new Article($iIdArtHomepage, $client, $lang);
|
|
|
|
$arrHomepageMetaTags['pagetitle'] = $oArt->getField('title');
|
|
}
|
|
|
|
//Cycle through all metatags
|
|
foreach ($availableTags as $key => $value) {
|
|
$metavalue = conGetMetaValue($idartlang, $key);
|
|
|
|
if (strlen($metavalue) == 0) {
|
|
//Add values for metatags that don't have a value in the current article
|
|
switch (strtolower($value["name"])) {
|
|
case 'author':
|
|
//Build author metatag from name of last modifier
|
|
$oArt = new Article($idart, $client, $lang);
|
|
$lastmodifier = $oArt->getField("modifiedby");
|
|
$oUser = new User();
|
|
$oUser->loadUserByUserID(md5($lastmodifier));
|
|
$lastmodifier_real = $oUser->getRealname(md5($lastmodifier));
|
|
|
|
$iCheck = CheckIfMetaTagExists($metatags, 'author');
|
|
$metatags[$iCheck]['name'] = 'author';
|
|
$metatags[$iCheck]['content'] = $lastmodifier_real;
|
|
|
|
break;
|
|
case 'date':
|
|
//Build date metatag from date of last modification
|
|
$oArt = new Article($idart, $client, $lang);
|
|
$lastmodified = $oArt->getField("lastmodified");
|
|
|
|
$iCheck = CheckIfMetaTagExists($metatags, 'date');
|
|
$metatags[$iCheck]['name'] = 'date';
|
|
$metatags[$iCheck]['content'] = $lastmodified;
|
|
|
|
break;
|
|
case 'description':
|
|
//Build description metatag from first headline on page
|
|
$iCheck = CheckIfMetaTagExists($metatags, 'description');
|
|
$metatags[$iCheck]['name'] = 'description';
|
|
$metatags[$iCheck]['content'] = $sHeadline;
|
|
|
|
break;
|
|
case 'keywords':
|
|
$iCheck = CheckIfMetaTagExists($metatags, 'keywords');
|
|
$metatags[$iCheck]['name'] = 'keywords';
|
|
$metatags[$iCheck]['content'] = $sText;
|
|
|
|
break;
|
|
case 'revisit-after':
|
|
case 'robots':
|
|
case 'expires':
|
|
//Build these 3 metatags from entries in homepage
|
|
$sCurrentTag = strtolower($value["name"]);
|
|
$iCheck = CheckIfMetaTagExists($metatags, $sCurrentTag);
|
|
$metatags[$iCheck]['name'] = $sCurrentTag;
|
|
$metatags[$iCheck]['content'] = $arrHomepageMetaTags[$sCurrentTag];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// save metatags in cache file
|
|
file_put_contents($cachefilename, serialize($metatags));
|
|
} else {
|
|
#Get metatags from file system cache
|
|
$metatags = unserialize(file_get_contents($cachefilename));
|
|
}
|
|
|
|
return $metatags;
|
|
}
|
|
|
|
/**
|
|
* Checks if the metatag allready exists inside the metatag list.
|
|
*
|
|
* @param array|mixed $arrMetatags List of metatags or not a list
|
|
* @param string $sCheckForMetaTag The metatag to check
|
|
* @return int Position of metatag inside the metatag list or the next
|
|
* available position
|
|
*/
|
|
function CheckIfMetaTagExists($arrMetatags, $sCheckForMetaTag) {
|
|
if (!is_array($arrMetatags) || count($arrMetatags) == 0) {
|
|
// metatag list ist not set or empty, return initial position
|
|
return 0;
|
|
}
|
|
|
|
// loop thru existing metatags and check against the listitem name
|
|
foreach ($arrMetatags as $pos => $item) {
|
|
if ($item['name'] == $sCheckForMetaTag) {
|
|
// metatag found -> return the position
|
|
return $pos;
|
|
}
|
|
}
|
|
|
|
// metatag doesn't exists, return next position
|
|
return count($arrMetatags);
|
|
}
|
|
|
|
?>
|