con_keywords

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

con_keywords

Beitrag von emergence » Fr 29. Okt 2004, 13:23

hab mir das jetzt ein wenig angesehen...
die einzige tabelle mit der ich mich noch nicht beschäftigt habe...

gibts da ne kleine info wie das zu verwenden ist und wo überall die einträge vorgenommen werden...
die jetzige volltextsuche nimmt ja auf diese tabelle keine rücksicht (wenn es halt für eine volltextsuche gedacht war)
bzw.
für welches einsatzgebiet war das gedacht ?

idkeyword -> ist klar
keyword -> ebenso
exp -> ? gedacht wofür ?
auto -> schätze mal das beinhaltet die idcatart wo überall die stichwörter vorkommen und wie oft ? (&23=1)?
self -> ?
idlang -> ist klar

ähm und weil ich schon dabei bin kommt mir vor als ob es da einen bug gibt...
bei keyword werden enities eingetragen... ? ähm so beabsichtigt ? denke nicht...
zb: eacute, auml, szlig, egrave
ist ja eigentlich nonsense..
*** make your own tools (wishlist :: thx)

oma wetterwax
Beiträge: 97
Registriert: Do 6. Mai 2004, 07:38
Kontaktdaten:

Beitrag von oma wetterwax » Mo 1. Nov 2004, 20:19

diese tabelle hat mich beim datenbank-dump in den hellen wahnsinn getrieben .... fast 10.000 einträge :roll:

a propos bug:
(bei mir steht übrigens "uebrigens" und nicht "uumlbrigens")
auch zeilenschaltungen und satzzeichen werden ignoriert, wenn kein leerzeichen folgt - aus:
voraussetzungen:
??
Lehrende:
Sabine u.s.w.
wird "voraussetzungenlehrendesabine"

gruss
oma

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 15. Nov 2004, 13:23

ich hab mir das jetzt etwas genauer angesehen...

vergessen wir mal die 4.4.x serie...

die keyword erstellung wird ja über die class.search.php momentan erledigt...

soweit so gut...

wieso wird die class.search.php in functions.con2.php eingebunden ?
sollte sie nicht in functions.general.php eingebunden werden ?
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 15. Nov 2004, 14:07

wie auch immer mit der class.search.php hat sich das problem mit auml etc.. in luft aufgelöst...

das mit self hab ich aber trotzdem noch nicht verstanden...
wie und wo kann man diese setzen ?
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 20. Nov 2004, 12:54

bei der durchsicht der functions.con.php bzw functions.con2.php

hab ich diese nette funktion gefunden...

Code: Alles auswählen

function conGenerateKeywords($client, $lang)
{
    global $cfg;
    $db_art  = new DB_Contenido;
    
    $options = array("img", "link", "linktarget", "swf"); // cms types to be excluded from indexing
    
    $sql = "SELECT
                a.idart, b.idartlang
            FROM
                ".$cfg["tab"]["art"]." AS a,
                ".$cfg["tab"]["art_lang"]." AS b
            WHERE
                a.idart    = b.idart AND
                a.idclient = $client AND
                b.idlang = $lang";
    
    $db_art->query($sql);
    
    $articles = array();
    while ($db_art->next_record())
    {
        $articles[$db_art->f("idart")] = $db_art->f("idartlang");
    }
    
    if (count($articles) > 0)
    {
        foreach ($articles as $artid => $article_lang)
        {
            $article_content = array();
            $article_content = conGetContentFromArticle($article_lang);
            
            if (count($article_content) > 0)
            {
                $art_index = new Index();
                $art_index->lang = $lang;
                $art_index->start($artid, $article_content, 'auto', $options);
            }
                
        }
    }

}
abgesehen davon das diese funktion nirgendwo aufgerufen wird, ergeben sich bei mir doch ein paar fragen... (mir ist klar was die funktion machen soll) ähm und wo sollte sie aufgerufen werden ? im setup bei einem upgrade ?

und in der functions.general.php
findet man ja folgendes (leicht abgewandelte version)

Code: Alles auswählen

function saveKeywordsForArt($keycode, $idart, $place, $lang) {

	$options = array("img", "link", "linktarget", "swf"); // cms types to be excluded from indexing
	$index = new Index();
	$index->lang = $lang;
	$index->start($idart, $keycode, $place, $options);
}
1. versteh nicht warum die saveKeywordsForArt in der function.general.php steckt...
sollte die nicht in der functions.con.php sein ?
2. conGenerateKeywords sollte in der schleife saveKeywordsForArt verwenden werden... oder nicht ?

die class.search.php wurde ja in der functions.api.php ergänzt...
wenn ich mir jetzt die ladereihen folge ansehe

contenido/main.php
contenido/includes/include.backendedit.php
cms/front_content.php

sehe ich eigentlich kein problem das so umzustellen...

ähm und ja die aufsplittung von functions.con.php und functions.con2.php bringts irgendwie nicht...
in der front_content.php werden sowieso beide zu beginn geladen...
einen wirklichen geschwindigkeits vorteil bringt die weitere aufsplittung sicher nicht...

so wird es sonst leider immer unübersichtlicher...
*** make your own tools (wishlist :: thx)

_Marc
Beiträge: 76
Registriert: Di 12. Sep 2006, 11:38
Kontaktdaten:

Beitrag von _Marc » Do 8. Mär 2007, 17:15

Hallo,

hier ein kleines quick&veryverydirty-Skript, um die Tabelle con_keywords nach einer Leerung erneut zu füllen. Client und Language müssen von Hand eingetragen werden.

Code: Alles auswählen

<?php
/**********************************************************************************
* File      :   $RCSfile$
* Project   :   Contenido
* Descr     :   Update Keywords. Please modify Client and Language manually!!!
*
* Author    :   Marc Schettke
*               
* Created   :  8.3.2007 
*
* © Marc Schettke 2007
*
* 
*
* $Id$
***********************************************************************************/

include_once ('../includes/startup.php');

cInclude ("includes", 'functions.general.php');

cInclude ("includes", 'functions.i18n.php');
cInclude ("includes", 'functions.api.php');
cInclude ("includes", 'functions.general.php');
cInclude ("includes", 'functions.forms.php');
cInclude ("includes", 'functions.con2.php');

cInclude ("includes", 'cfg_sql.inc.php');

cInclude ("classes", 'class.xml.php');
cInclude ("classes", 'class.navigation.php');
cInclude ("classes", 'class.template.php');
cInclude ("classes", 'class.backend.php');
cInclude ("classes", 'class.notification.php');
cInclude ("classes", 'class.area.php');
cInclude ("classes", 'class.action.php');
cInclude ("classes", 'contenido/class.module.php');
cInclude ("classes", 'class.layout.php');
cInclude ("classes", 'class.treeitem.php');
cInclude ("classes", 'class.user.php');
cInclude ("classes", 'class.group.php');
cInclude ("classes", 'class.cat.php');
cInclude ("classes", 'class.client.php');
cInclude ("classes", 'class.inuse.php');
cInclude ("classes", 'class.table.php');

i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
cInclude ("includes", 'cfg_language_de.inc.php');

conGenerateKeywords($client, $lang);


echo "<br>All done. Please remove this script.";

?>
Grüße
Marc

MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount » So 11. Nov 2007, 11:51

Ich bin eher zufällig darauf gestoßen. Mein eigentlicher Wunsch war/ist eine ordentlich Tag-Cloud für meine Mandanten. Also habe ich mich, betriebsblind wie immer, direkt ans Werk gemacht. ;)

Ich habe mir erlaubt eine Version von HerrBs ArtikelListAdv als Grundlage zu nehmen. Für Testzwecke war das ideal, da ich mir über den Kategoriebaum immer andere Kategorien mit anderen Artikel und Textinhalten aussuchen konnte. Danach habe ich einfach ein wenig mit der Suche experimentiert. Gefunden Begriffe bekomme ich ja dort direkt mit einem Link serviert. Schön. ;)

Hups?! Ein Objekt Index?! Eine Funktion SearchResult?! Na sowas?! Und schwups bin ich bei con_keywords gelandet. Sehr betriebsblind. Ich weiß. ;)

Mich verwundert bei con_keywords allerdings einiges. Dabei wäre das so eine super Sache. Gerade für meine Tag-Cloud. Wo doch sogar die Häufigkeit des Auftretens der Keywords mit übergeben wird. ;)

Aber zuvor noch zu emergences Ausgangsfrage. Ist ja irgendwie hier nicht beantwortet, oder? Ich hab da mal in die class.search.php reingeschaut und was gefunden.

Code: Alles auswählen

    /**
     * 'auto' or 'self'
	 * The field 'auto' in table con_keywords is used for automatic indexing.
	 * The value is a string like "&12=2(CMS_HTMLHEAD-1,CMS_HTML-1)", which means a keyword occurs 2 times in article with $idart 12
 	 * and can be found in CMS_HTMLHEAD[1] and CMS_HTML[1].
	 * The field 'self' can be used in the article properties to index the article manually.
     * @var string
     */
to be continued...

So, weiter im Text. Musste mal eben weg. ;)

Trotzdem erschließt sich mir nicht die Sache mit exp und self. Liegt wahrscheinlich daran, dass ich noch nicht mit den Artikelspezifikationen gearbeitet habe. Wofür waren die nochmal? ;)

Aber nun zum eigentlich Wunsch meiner Tag-Cloud. Ich habe hier ja HerrBs ArtikelListAdv herangezogen. Der liefert mir die Textinhalte meiner Container so schön aufgeräumt. Ich habe im ersten Schritt nichts anderes gemacht, als diese ganzen Wortschwalle einer Website um für Suchmaschinen grammatikalischen Müll zu erleichtern. Hinzu kommen hier noch gefährliche Worte :shock: wie z.B. Handelsmarken/Trademarks und mir außerordentlich wichtig erscheinende Worte wie z.B. Webdesign, Hosting, Programmierung... Das alles schön als kommaseparierten String, der in einem Array aufgesplittet wird.

Code: Alles auswählen

$myArrSet["value"]["GrammarPronoun"]       = "CMS_VALUE[13]";
$myArrSet["value"]["GrammarArticle"]       = "CMS_VALUE[14]";
$myArrSet["value"]["GrammarPreposition"]   = "CMS_VALUE[15]";
$myArrSet["value"]["GrammarKonjunction"]   = "CMS_VALUE[16]";
$myArrSet["value"]["GrammarPunctation"]    = "CMS_VALUE[17]";
$myArrSet["value"]["DangerousWord"]        = "CMS_VALUE[18]";
$myArrSet["value"]["ImportantWord"]        = "CMS_VALUE[19]";


Dabei ist die Reihenfolge der wichtigen Worte entscheidend. Wer zuerst kommt, wird auch einen Platz auf den vorderen Array-Rängen ergattern. Das habe ich eingebaut, um hier vielleicht noch zusätzlich eine automatische article meta keyword ausfüll hilfe zu bekommen.

Diese Begriff-Arrays schneide ich dann bspw. nach dem 10 Value einfach ab. So kann ich sicherstellen, dass ich a) alle Keywords die im Artikel auftauchen auch im meta stehen und b) auch deren Reihenfolge beeinflussen.

Warum das alles? Keine Ahnung. Spaß beiseite. Ich halte es für außerordentlich wichtig so Worte wie "ich, du, er, sie, es, und, oder" erst gar nicht in die MEGA-Tabelle con_keywords einzutragen. Und nun zu meiner Frage. Wo baue ich meine

Code: Alles auswählen

function schmeissDenGrammatikMuellWegUndSpeichereMirOrdentlicheKeywordsInMeineTabelle($value,$extract){
}
ein?

Gruß myAccount

Soeren
Beiträge: 33
Registriert: Mi 29. Dez 2004, 17:29
Wohnort: Bremen
Kontaktdaten:

Beitrag von Soeren » Sa 28. Jun 2008, 18:43

_Marc hat geschrieben:Hallo,

hier ein kleines quick&veryverydirty-Skript, um die Tabelle con_keywords nach einer Leerung erneut zu füllen. Client und Language müssen von Hand eingetragen werden.
Hi Marc,

Quick&Dirty ist ja ganz nett, aber geht bei mir nicht. Setze Con 4.4.5 ein und bekomme die Fehlermeldung:

Code: Alles auswählen

Warning: Unknown(../includes/startup.php): failed to open stream: No such file or directory in [pathto]/cms/cms/front_content.php(567) : eval()'d code on line 676

Warning: (null)(): Failed opening '../includes/startup.php' for inclusion (include_path='.:') in [pathto]/cms/cms/front_content.php(567) : eval()'d code on line 676

Warning: contenido_include([pathto]/cms/contenido/classes/contenido/class.module.php): failed to open stream: No such file or directory in [pathto]/cms/contenido/includes/api/functions.api.general.php on line 67

Warning: contenido_include(): Failed opening '[pathto]/cms/contenido/classes/contenido/class.module.php' for inclusion (include_path='.:') in [pathto]/cms/contenido/includes/api/functions.api.general.php on line 67

Fatal error: Call to undefined function: congetcontentfromarticle() in [pathto]/cms/contenido/includes/functions.con2.php on line 47
wobei Pathto natürlich der richtige Serverpfad ist.

Kann es sein, dass es eine andere Version ist die ich brauche.... Wäre super, wenn ich es dennoch verwenden könnte, da ich gerade mit den Keywords dabei bin die Tagcloud zu bauen.

Gruß aus Bremen :D
----
Contenido 4.4.5, Contenido 4.6

MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag von MichFress » Sa 28. Jun 2008, 19:46

Natürlich musst du dafür sorgen, dass die erste Codezeile

Code: Alles auswählen

include_once ('../includes/startup.php'); 
auch korrekt die contenido/includes/startup.php inkludiert.

Es war offenbar eher dazu gedacht, dass man diesen Code in eine gesonderte PHP-Datei im Backend speichert und aufruft.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)

Antworten