interface für con_properties

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

interface für con_properties

Beitrag von emergence »

gibts eigentlich schon sowas ? ich bräuchte sowas um x-beliebige werte zu definieren... und dann weiter zu verwenden.
die standard parameter für con_userprop sind etwas zu klein für mich...
wenn nicht wäre es nicht schlecht noch ein paar felder bei der con_properties mit rein zu ziehen...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

ähm ja jedes objekt kannst du im CVS head über den member $properties ansteuern...ich kam bisher mit 3 feldern aus (ich hab meistens nur wert und name gebraucht), falls ich mehr wollte hab ich z.b. arrays serialisiert.

oder meinst du ein GUI?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

yep perfekt, genau das hab ich gebraucht

werd das gleich mal testen...
gui bau ich mir selbst...
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

hab mir das gerade in ne ältere version eingebaut...
jetzt hab ich ne blöde frage...

ich verwende momentan sowas wie

Code: Alles auswählen

<?php

cInclude ("classes", "class.properties.php");
$properties = new PropertyCollection();

$properties->setValue("idcat", 27, "visual", "image", "images/tool2.gif");

echo $properties->getValue("idcat", 27, "visual", "image");

?>
das funktioniert auch wunderbar...

jedoch wenn ich auf die idee komme
$properties->create("idcat", 27, "visual", "image", "images/tool2.gif");
zu verwenden wird in der db erneut ein eintrag mit neuer id vorgenommen...

ist das so beabsichtigt ? beim abfragen erhalte ich jedoch nur einen wert zurück... ähm...

oder ist create nur als interne funktion zu sehen... ?

aber da ist noch ne kleine sache...

die klasse braucht noch ne methode den eintrag komplett zu löschen...
-> deleteValue

es ist zwar delete vorhanden aber dazu müsste man die idproperty kennen, die die klasse leider nicht liefert...
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm nun ja da ich diese möglichkeit brauche hab ich jetzt folgendes in der class ergänzt...

sollte stimmen... zumindestens funktioniert es bei mir...

Code: Alles auswählen

	/*
	 * Delete a property item.
	 *
	 * Example:
	 *
	 * $properties->deleteValue("idcat", 27, "visual", "image");
	 *
	 * @param itemtype 	mixed Type of the item (example: idcat)
 	 * @param itemid 	mixed ID of the item (example: 31)
 	 * @param type	 	mixed Type of the data to store (arbitary data)
 	 * @param name		mixed Entry name
	 */
	function deleteValue ($itemtype, $itemid, $type, $name)
	{
		if (isset($this->client))
		{
		    $this->select("idclient = '".$this->client."' AND itemtype = '$itemtype' AND itemid = '$itemid' AND type = '$type' AND name = '$name'");
        } else {
            $this->select("itemtype = '$itemtype' AND itemid = '$itemid' AND type = '$type' AND name = '$name'");
        }

		if ($item = $this->next())
		{
			$this->delete($item->get("idproperty"));
		}
	}
da ergibt sich jetzt noch ne frage

bei setValue wird nicht kontrolliert ob $this->client gesetzt ist... ist das ein bug oder beabsichtigt.... ?

und damit das ganze noch etwas intressanter ist sollte es ebenso möglich sein den wert $client komplett zu ignorieren...

eventuell mittels eines unset (nur hab ich keine ahnung ob das innerhalb der klasse funktioniert)
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

und da hab ich gleich noch ne blöde frage...

sollte die con_art_spec nicht ebenfalls via con_properties abgewickelt werden ?
*** make your own tools (wishlist :: thx)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Dann habe ich auch noch eine:

Was steckt hinter der itemid? Wenn ich eine Mandanteneingenschaft ergänze, wird diese auf 1 gesetzt. Ist das immer so bzw. wann wird diese ID anders gesetzt?

Gruß
HerrB
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

wenn du sie anders setzt, steht nicht mehr 1 drinnen...

zb

Code: Alles auswählen

<?php 

$properties = new PropertyCollection(); 

$properties->setValue("idcat", 27, "visual", "image", "images/tool2.gif"); 
echo $properties->getValue("idcat", 27, "visual", "image"); 

?>
*** make your own tools (wishlist :: thx)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

*grins*, ach?

Dann gehe ich jetzt mal davon aus, dass bei Mandanteneinstellungen da immer eine 1 steht - wobei ich dann immer noch nicht so ganz verstanden habe, wozu es itemid gibt und ich diese ID auch noch bei getValue wissen muss (kein optionaler Wert)... :roll:

Aber danke für die Info.

Gruß
HerrB
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

HerrB hat geschrieben:*grins*, ach?

Dann gehe ich jetzt mal davon aus, dass bei Mandanteneinstellungen da immer eine 1 steht - wobei ich dann immer noch nicht so ganz verstanden habe, wozu es itemid gibt und ich diese ID auch noch bei getValue wissen muss (kein optionaler Wert)... :roll:
wieso mandantenid ? du hast nach der itemid gefragt... im neusten csv gibts in der klasse auch die möglichkeit die mandanten id zu ändern, aber nicht um sie zu ignorieren...

etwas unflexibel ist das ganze schon da man immer nur dezitiert einen wert auslesen kann...

nur so als beispiel:
ich definiere mehrere properties die für ne bestimmte idcat gelten sollen...

$properties->setValue("idcat", 1, "color", "light", "#EEEEEE");
$properties->setValue("idcat", 1, "color", "dark", "#CCCCCC");

ich könnte dann einfach über ein modul abfragen ob irgendwelche werte für genau diese kategorie gesetzt wurden....
$dark = $properties->getValue("idcat", $idcat, "color", "dark");
$light = $properties->getValue("idcat", $idcat, "color", "dark");

ist kein wert für diese kategorie definiert wäre $dark oder $light false...
die werte würden dann nur geliefert werden wenn ich in idcat = 1 bin...

da kann man wirklich viele schöne sachen damit machen ;-)
*** make your own tools (wishlist :: thx)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Es gibt bei Administration -> Mandanten in V4.5 die Möglichkeit, Eigenschaften abzulegen (eine super Stelle für die Newsletter-idcatart). Um diese aber über getValue ermitteln zu können, muss ich die itemid wissen, die vom Contenido-Backenend eingetragen wird. Daher der Satz "dann nehme ich mal an, dass bei Mandanteneinstellungen da immer 1 steht" - mit der Mandanten-ID hat das zunächst nix zu tun.

Ich bin deswegen ein wenig überrascht, da mit itemtype = "clientsetting", type = "Irgendwas", name = "IrgendeinName" zumindest Mandanteneinstellungen eindeutig definiert sind (und man - wenn die 1 Annahme stimmt - über das Backend nicht mehrere Mandanten-Eigenschaften mit identischem itemtype, type und name anlegen kann).

Für diesen Fall würde $wert = $properties->getValue("clientsetting", "Irgendwas", "IrgendeinName"); völlig ausreichen.

Was ich übrigens noch in getValue vermisse, ist ein Standardwert, e.g. $light = $properties->getValue("idcat", $idcat, "color", "dark", "#EEEEEE"); - falls der Wert gar nicht definiert ist. Da erspart man sich das if (!$light) ...

(Wenn Du $light = $properties->getValue("idcat", $idcat, "color", "light"); meintest, habe ich das Beispiel verstanden)

Und danke für die Info...

Gruß
HerrB
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

HerrB hat geschrieben:(Wenn Du $light = $properties->getValue("idcat", $idcat, "color", "light"); meintest, habe ich das Beispiel verstanden)
ähm ja danke , meine ich... ;-) copy & paste
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ich hab da noch zwei funktionen geschrieben für die klasse... die ich ganz praktisch finde...

es werden nur die parameter $itemtype, $itemid übergeben...

eine dient nur dazu abzufragen ob werte definiert sind und liefert true oder false
die zweite liefert mir alle werte als array zurück...

Code: Alles auswählen

    /*
     * Checks if values for a given item are available.
     *
     * @param itemtype  mixed Type of the item (example: idcat)
     * @param itemid    mixed ID of the item (example: 31)
     * @return          boolen
     */
    function isStored ($itemtype, $itemid)
    {
        if (isset($this->client))
        {
            $this->select("idclient = '".$this->client."' AND itemtype = '$itemtype' AND itemid = '$itemid'");
        } else {
            $this->select("itemtype = '$itemtype' AND itemid = '$itemid'");
        }



        if ($item = $this->next())
        {
            return true;
        }

        return $false;
    }


    /*
     * Checks if values for a given item are available.
     *
     * @param itemtype  mixed Type of the item (example: idcat)
     * @param itemid    mixed ID of the item (example: 31)
     * @return          array for each given item
     */
    function getStored ($itemtype, $itemid)
    {
        if (isset($this->client))
        {
            $this->select("idclient = '".$this->client."' AND itemtype = '$itemtype' AND itemid = '$itemid'");
        } else {
            $this->select("itemtype = '$itemtype' AND itemid = '$itemid'");
        }

        while ($item = $this->next())
        {
            $found = true;
            $tmparray[] = Array ($item->get("type") , $item->get("name"), $item->get("value"));
        }

        if ($found) {
            return $tmparray;
        }

        return $false;
    }
EDIT: veraltet
-> http://www.contenido.org/forum/viewtopi ... 1768#81768
Zuletzt geändert von emergence am Fr 9. Jun 2006, 11:45, insgesamt 1-mal geändert.
*** make your own tools (wishlist :: thx)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Um auf diese Frage zurück zu kommen:
Dann gehe ich jetzt mal davon aus, dass bei Mandanteneinstellungen da immer eine 1 steht - wobei ich dann immer noch nicht so ganz verstanden habe, wozu es itemid gibt und ich diese ID auch noch bei getValue wissen muss (kein optionaler Wert)...
Die Property wird in classes\contenido\class.client.php gesetzt. Dort wird als itemid die Mandanten-ID ($client) gespeichert - sie ist also nicht immer 1... (nur so als Info).

Man muss also die Mandanteneinstellungen mit

Code: Alles auswählen

$variable = $properties->getValue("clientsetting", $client, "<Typ>", "<Name>");
ermitteln.

Gruß
HerrB
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

mittlerweile hab ich ein ziemliches probleme mit der klasse

wenn ich mehre eigenschaften auf einmal selektiere, bremst es mir die komplette website aus.
nur um die eigenschaften auszulesen, sagen wir mal die eigenschaften von 3 kategorien auf einmal benötigt das ganze fast 0,5 sekunden...

bei einer seite die ich gerade baue, hab ich das mit der hauptnavigation verbunden...
zum anzeigen der seite benötige ich dann beinahe 4-5 sekunden...
und das ist schlichtweg gesagt einfach nicht akzeptabel.
ohne con_properties wird die seite in 0.1 - 0.3 sekunden generiert...

vielleicht sollten wir der klasse einen cache verpassen
nur so als vorschlag...
*** make your own tools (wishlist :: thx)
Antworten