hier und da interessiert es den einen oder anderen Autoren, wie viele Worte ein Artikel beinhaltet. Nicht umsonst bieten Word & Co. die Funktion "Worte zählen". Hier jedoch jedes Mal den Artikeltext erst rüberkopieren und dann nachschauen wie viele Worte enthalten sind, ist reichlich mühsam. Insofern gibt es jetzt ein neues Modul, dass einem direkt im Backend in der Artikelvorschau bzw. im Reiter "Editieren" entsprechende Daten liefert und noch weitere Funktionen bietet die einem in punkto keywords/SEO weiterhelfen können: text_stats_sd
FEATURES
* zu checkender Bereich im Layout frei festlegbar
* Blacklist für irrelevante Füllworte wie "der, die, das, ..." und Filterung über frei festlegbare Mindestzahl an Zeichen
* Anzeige der gesamten Worte, der inhaltlich relevanten Worte und Füllworte, Anzeige des prozentualen Anteils eines keywords an der Gesamtanzahl Worte
* Ober- und Untergrenze für optimalen prozentualen Anteil eines keywords frei festlegbar
* Alphabetische Sortierung der relevanten keywords und Hervorheben der keywords die im optimalen prozentualen Bereich liegen und darüber oder darunter
* Die Anzeige der Statistik kann im Backend, ohne sie im Modul zu fixieren, per Button ein- und ausgeblendet werden. Die Entscheidung für oder wider wird per localstorage hinterlegt, so dass auch beim Aufruf anderer Artikel entweder ebenfalls sofort die Statistik angezeigt wird oder nicht. Wenn sie nicht angezeigt werden soll, wird auch keine Analyse durchgeführt was bei langen Texten einen etwas schnelleren Seitenaufbau ermöglicht.
* Die Statistik kann wahlweise unterhalb des Artikels eingeblendet werden oder in einem popup-Window - was die Anzeige auch während des Bearbeitens eines Artikels ermöglicht ohne den wysiwyg-Editor wieder verlassen zu müssen.
INSTALLATION
1) neues Modul "text_stats_sd" anlegen und folgenden Code in den Output kopieren
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : text_stats_sd
* Author(s) : Markus Hübner
* Copyright : www.seamless-design.de Markus Hübner
* Created : 12.04.2012
************************************************/
if($contenido)
{
$current_article = new Article($idart, $client, $lang);
$title= $current_article->get("title");
?>
<div style="background-color: #ffffff; padding: 5px; margin: 5px;">
<script type="text/javascript">
/***** begin display options 1 *****/
function localstorage_show(var_show)
{
localStorage.setItem("#text_stats_sd#", var_show);
location.reload();
}
document.write('<hr>');
var var_show_stats=localStorage.getItem("#text_stats_sd#");
if(var_show_stats=="true")
{
document.write('<input type="button" value="<?php echo mi18n("hide statistics"); ?>" onclick="localstorage_show(\'false\')"/>');
/***** end display options 1 *****/
/***** begin declaring variables for customizing *****/
var array_blacklist_keywords= new Array('aber','achten','alle','allem','allen','aller','alles','als','also','andere','auch','auf','aufgrund','aus','bei','beim','besser','bevor','bin','bis','bisher','bist','daß','dabei','danach','dann','daran','das','dass','daß','daß','dazu','dein','deine','deinem','deinen','deiner','deines','dem','den','denen','denn','der','deren','des','dessen','dich','dir','die','diese','diesen','diesem','dieser','dieses','du','durch','ebenso','eigenen','eigener','eigenes','ein','eine','einem','einen','einer','eines','einige','einmal','es','etwa','etwas','euer','eure','eures','für','fast','für','gar','hätte','hab','habe','haben','hat','hatte','hätte','hatten','her','hier','hin','ich','ihn','ihnen','ihr','ihre','ihren','ihres','in','ins','ist','ist','jede','jeden','jeder','jedes','jetzt','kann','kannst','kaum','kein','keine','keiner','konnte','müssen','müsste','müssten','mal','man','mein','meine','meinem','meiner','meines','mich','mir','mit','möchte','möchte','möchten','möchten','möchtest','möchtest','muss','müssen','musst','musste','müsste','müssten','nach','nicht','noch','nun','nur','oder','ohne','sei','sein','seinem','seinen','seiner','seines','sich','sie','sind','sind','sofort','sogar','sollen','sollte','sollte','solltest','sondern','sowie','statt','tun','uüber','über','und','uns','unser','unserer','unseres','unter','viel','vielen','vieler','vieles','vielleicht','vom','von','vor','vorab','wäre','wären','wann','war','wäre','waren','wären','was','weil','weitere','wenn','wer','werde','werden','wie','will','willst','wir','wird','wirst','wo','wobei','woher','worum','wurde','wurden','zu','zum','zur');
var var_opt_percentage_low=3;
var var_opt_percentage_high=5;
var var_min_letters=3;
var var_show_stats_new_window="true"; // true or false
/***** end declaring variables for customizing *****/
var var_title="<?php echo $title; ?>";
/***** begin parsing html-content into string *****/
var var_content=document.getElementById('text_stats_sd').innerHTML;
//document.write('<code>'+var_content+'</code><hr>');
var_content=var_content.toLowerCase();
var_content=var_content.replace(/<\/?[^>]+(>|$)/g, "");
var_content=var_content.replace(/-->/g, "");
var_content=var_content.replace(/[ ]/g, "#");
var_content=var_content.replace(/\r|\n|\r\n/g, "#");
var_content=var_content.replace(/\f|\t|\v/g, "");
var_content=var_content.replace(/ /g, "");
var_content=var_content.replace(/\(/g,"");
var_content=var_content.replace(/\)/g,"");
var_content=var_content.replace(/\.|,|:|;|!|\?|>|<|&|\"|\'|\/|\|/g,"");
var_content=var_content.replace(/[0-9]/g,"");
//document.write(var_content+'<hr>');
/***** end parsing html-content into string *****/
//var_content =var_content.replace(/##/g,"#");
/***** begin setting up array with all relevant keywords contained in string *****/
var array_content_keywords=new Array();
var array_content_keywords=var_content.split("#");
array_content_keywords.sort();
//document.write('Array-Elemente: '+array_content_keywords.length+'<br/>');
var var_i=0;
var var_j=0;
var var_amount_of_words=0;
var var_in_blacklist="false";
var var_keyword="";
var array_content_keywords_new= new Array();
while(var_i<array_content_keywords.length)
{
var_keyword=array_content_keywords[var_i].replace(/[ ]/g, "");
if(var_keyword!="") var_amount_of_words++;
var_in_blacklist="false";
while(var_j<array_blacklist_keywords.length)
{
if(var_keyword==array_blacklist_keywords[var_j])
{
var_in_blacklist="true";
break;
}
var_j++;
}
var_j=0;
if(var_keyword!="" && var_keyword.length>=var_min_letters && var_in_blacklist=="false")
{
//document.write(var_keyword+'<br/>');
array_content_keywords_new.push(var_keyword);
}
var_i++;
}
/***** end setting up array with all relevant keywords contained in string *****/
/***** begin setting up array with unique keywords *****/
//document.write('<hr>');
var array_content_keywords_unique=new Array();
var_i=0;
var_j=0;
var var_unique="true";
while(var_i<array_content_keywords_new.length)
{
var_keyword=array_content_keywords_new[var_i];
var_unique="true";
while(var_j<array_content_keywords_unique.length)
{
if(var_keyword==array_content_keywords_unique[var_j])
{
var_unique="false";
break;
}
var_j++;
}
var_j=0;
if(var_unique=="true")
{
//document.write(var_keyword+'<br/>');
array_content_keywords_unique.push(var_keyword);
}
var_i++;
}
/***** end setting up array with unique keywords *****/
/***** begin counting keywords and displaying statistical data *****/
var var_amount_of_irrelevant_words=var_amount_of_words-array_content_keywords_new.length;
var var_percentage=0;
if(var_show_stats_new_window=="true")document.write('<div style="display:none;">');
document.write('<div id="text_stats_sd_content_new_window">');
document.write('<p><strong><?php echo mi18n("Overview:"); ?></strong></p>');
document.write('<table style="font-size: 11px;">');
document.write('<tr><td style="font-weight: 900;white-space: nowrap;"><?php echo mi18n("Words"); ?></td><td style="text-align: right;">'+var_amount_of_words+'</td><td style="white-space: nowrap; text-align: right;">(100.00 %)</td></tr>');
var_percentage=array_content_keywords_new.length/var_amount_of_words*100;
var_percentage=Math.round(var_percentage*100)/100;
document.write('<tr><td style="font-weight: 900;white-space: nowrap;"><?php echo mi18n("Relevant words (min. "); ?>'+var_min_letters+'<?php echo mi18n(" letters)"); ?></td><td style="text-align: right;">'+array_content_keywords_new.length+'</td><td style="white-space: nowrap; text-align: right;">('+var_percentage+' %)</td></tr>');
var_percentage=Math.round((100-var_percentage)*100)/100;
document.write('<tr><td style="font-weight: 900;white-space: nowrap;"><?php echo mi18n("Irrelevant words"); ?></td><td style="text-align: right;">'+var_amount_of_irrelevant_words+'</td><td style="white-space: nowrap; text-align: right;">('+var_percentage+' %)</td></tr>');
document.write('<tr><td style="font-weight: 900;white-space: nowrap;"><?php echo mi18n("Relevant unique words"); ?></td><td style="text-align: right;">'+array_content_keywords_unique.length+'</td><td style="white-space: nowrap; text-align: right;"></td></tr>');
document.write('</table>');
document.write('<p><strong><?php echo mi18n("Details:"); ?></strong></p>');
document.write('<table style="font-size: 11px;"><tr><td style="border:1px solid #555555; padding: 3px; font-weight: 900;"><?php echo mi18n("Relevant unique keyword"); ?></td><td style="border:1px solid #555555; padding: 3px; font-weight: 900;"><?php echo mi18n("Amount"); ?></td><td style="border:1px solid #555555; padding: 3px; font-weight: 900;white-space: nowrap;"><?php echo mi18n("% of all words"); ?> ('+var_amount_of_words+')</td></tr>');
var_i=0;
var_j=0;
var var_z=0;
var_percentage=0;
while(var_i<array_content_keywords_unique.length)
{
var_keyword=array_content_keywords_unique[var_i];
while(var_j<array_content_keywords_new.length)
{
if(var_keyword==array_content_keywords_new[var_j]) var_z++;
var_j++;
}
var_j=0;
var_i++;
var_percentage=var_z/var_amount_of_words*100;
var_percentage=Math.round(var_percentage*100)/100;
if(var_percentage<var_opt_percentage_low) document.write('<tr><td>'+var_keyword+'</td><td style="text-align: right;">'+var_z+'</td><td style="text-align: right;">'+var_percentage+' %</td></tr>');
if(var_percentage>=var_opt_percentage_low && var_percentage<=var_opt_percentage_high) document.write('<tr><td style="font-weight: 900; border-bottom: 1px dotted #555555;">'+var_keyword+'</td><td style="font-weight: 900; border-bottom: 1px dotted #555555; text-align: right;">'+var_z+'</td><td style="font-weight: 900; border-bottom: 1px dotted #555555; text-align: right;">'+var_percentage+' %</td></tr>');
if(var_percentage>var_opt_percentage_high) document.write('<tr><td style="font-weight: 900; color: #ff0000; border-bottom: 1px dotted #555555;">'+var_keyword+'</td><td style="font-weight: 900; color: #ff0000; border-bottom: 1px dotted #555555; text-align: right;">'+var_z+'</td><td style="font-weight: 900; color: #ff0000; border-bottom: 1px dotted #555555; text-align: right;">'+var_percentage+' %</td></tr>');
var_z=0;
}
document.write('</table>');
document.write('</div>');
if(var_show_stats_new_window=="true")document.write('</div>');
/***** end counting keywords and displaying statistical data *****/
/***** begin showing stats in new window *****/
if(var_show_stats_new_window=="true")
{
var var_content_new_window=document.getElementById("text_stats_sd_content_new_window").innerHTML;
fens1=window.open("", "Textausgabe", "width=500px,height=500px,scrollbars=yes,resizable=yes,font-family=arial");
fens1.document.write('<div style="font-family: arial,helvetica,sans-serif;"><p style="font-weight: 900;">'+var_title+'</p>'+var_content_new_window+'</div>');
}
/***** end showing stats in new window *****/
/***** begin display options 2 *****/
}
else document.write('<input type="button" value="<?php echo mi18n("show statistics"); ?>" onclick="localstorage_show(\'true\')"/>');
/***** end display options 2 *****/
</script>
</div>
<?php
}
?>
2) Layout erweitern
a) Im Layout - die meisten werden die Daten unterhalb des Artikels angezeigt bekommen wollen - ganz am Ende vor dem </body>-Tag einen neuen Container einfügen
Code: Alles auswählen
<container id="????????" name="text_stats_sd" mode="fixed" default="text_stats_sd">text_stats_sd</container>
Die zu checkenden Daten werden per JavaScript und document.getElementById ermittelt. Insofern muss ein HTML-Bereich mit einer konkreten ID versorgt werden - in diesem Fall ist es id="text_stats_sd". Dazu kann der gewünschte Bereich zum Beispiel mit einem "neutralen <div>" umschlossen werden:
Code: Alles auswählen
[...]
<body>
[...]
<div id="text_stats_sd">
<div class="info">
<container id="50" name="Headline" types="Content" mode="optional" default="Headline">Headline</container>
<container id="51" name="SubHeadline" types="Content" mode="optional" default="Sub_Headline">SubHeadline</container>
<container id="52" name="Text" types="Content" mode="optional" default="">Content 1</container>
<container id="53" name="Text" types="Content" mode="optional" default="">Content 2</container>
<container id="54" name="Text" types="Content" mode="optional" default="">Content 3</container>
[...]
</div>
[...]
</body>
</html>
[...]
Code: Alles auswählen
[...]
<body>
[...]
<div class="info" id="text_stats_sd">
<container id="50" name="Headline" types="Content" mode="optional" default="Headline">Headline</container>
<container id="51" name="SubHeadline" types="Content" mode="optional" default="Sub_Headline">SubHeadline</container>
<container id="52" name="Text" types="Content" mode="optional" default="">Content 1</container>
<container id="53" name="Text" types="Content" mode="optional" default="">Content 2</container>
<container id="54" name="Text" types="Content" mode="optional" default="">Content 3</container>
[...]
</div>
[...]
</body>
</html>
[...]
Ggf. ist eine erneute Zuordnung des Layouts bei den Templates erforderlich. Einfach beim Template im Reiter "Editieren" das Dropdownfeld für die Auswahl des Layouts auf "--- kein ---" setzen und direkt danach wieder auf das ursprüngliche Layout.
Und Schluss is' mit der Wortezählerei...