Sonya, autometa rocks.
I have installed it, but also wanted to do something else. I wanted to be able to extract the keywords for use elsewhere. This is tricky because I don't know if the page had keywords or if they were generated by autometa.
So I adjusted function.autometa.php to make function.keywords.php - and it may not be the prettiest code, as I am unsure of the CMSMS architecture just yet so it may have unnecessary bits, but it works.
If someone wants to use it, feel free. It's a blatant ripoff of Sonya's code to a slightly different purpose.
Copy-and-paste this to a file called function.keywords.php and stick it in your plugins directory and call it by typing {keywords} wherever in your template..
Code: Select all
<?php
#written by ornery-geeks.org for CMSMS based on code from function.autometa.php by Sonya
function smarty_cms_function_keywords($params, &$smarty) {
global $gCms;
# params
$wordcount = isset($params['key_number']) ? $params['key_number'] : 10;
$wordlength = isset($params['key_length']) ? $params['key_length']:5;
$worddensity = isset($params['key_density'])?$params['key_density']:4;
$keywords = (isset($params['keywords']) && !$params['keywords'])?0:1;
$addkeys = array();
if (isset($params['key_add'])) {
$x = explode(',', $params['key_add']);
foreach ($x as $key) {
$addkeys[] = trim($key);
}
}
if (!isset($content_id) || empty($content_id)) {
$extra_attr = 'content';
$module_name = 'Search';
$content_id = $gCms->variables['content_id'];
$manager =& $gCms->GetHierarchyManager();
$node =& $manager->getNodeById($gCms->variables['content_id']);
if( !isset($node) || $node === FALSE ) return;
$content =& $node->Getcontent();
$pageinfo = &$gCms->variables['pageinfo'];
preg_match_all("|<meta[^>]+name=\"([^\"]*)\"[^>]+content=\"([^\"]*)\"[^>]+>|i",
$pageinfo->content_metadata, $preg_array, PREG_SET_ORDER);
// find existing meta data
$found_meta = array();
if (!empty($preg_array)) {
foreach($preg_array as $meta) {
$found_meta[$meta[1]] = $meta[2];
}
}
}
$do_keywords = isset($found_meta['keywords'])?false:true;
$keywordlist = $found_meta['keywords'];
if ($do_keywords && $keywords) {
if (CmsModule::GetModuleInstance('Search')) {
$db = $gCms->db;
$query = 'SELECT b.word
FROM '.cms_db_prefix().'module_search_items a,
'.cms_db_prefix().'module_search_index b
WHERE a.content_id = ?
AND a.module_name = ?
AND a.extra_attr = ?
AND a.id = b.item_id
AND length(b.word) >= ?
AND b.count >= ?
ORDER BY b.count DESC';
$dbr = $db->SelectLimit( $query, $wordcount, 0, array($content_id, $module_name, $extra_attr, $wordlength, $worddensity));
$wordlist = array();
while( $dbr && ($row = $dbr->FetchRow() ) )
{
$wordlist[] = strip_tags(str_replace('"','',$row['word']));
}
$addkeys = array_diff($addkeys,$wordlist);
$wordlist = array_merge($addkeys, $wordlist);
if (!empty($wordlist)) {
$keywordlist = implode(', ',$wordlist);
}
}
}
echo $keywordlist;
}