mehrere Kategorien konfigurieren und tinyMCE-Konfiguration

Gesperrt
stefan25376
Beiträge: 40
Registriert: Mi 15. Jun 2005, 09:40
Wohnort: Schwerte
Kontaktdaten:

mehrere Kategorien konfigurieren und tinyMCE-Konfiguration

Beitrag von stefan25376 » Sa 12. Mai 2007, 10:30

Hallo,

Erst einmal Hut ab! Ich habe fast 2 Jahre lang auf Contenido 4.4.5 gesetzt und nun einen Umstieg auf Contenido 4.6.15 gewagt. Gefällt mir sehr gut und einige Dinge sind nun wesentlich besser gelöst.

2 Dinge sind mir aufgefallen:

1. Sowohl in der alten als auch in der topaktuellen Version gibt es keine Möglichkeit mehrere Kategorien gleichzeitig zu konfigurieren (Templates). Folgende Szenarien:

1.1 Ich muss Navigations-Module ggf. testen. Dazu müssen aber erst Kategorien angelegt werden. Wenn ich etwas an der Konfiguration bzw. an der Template-Vorkonfiguration ändere, muss ich anschließend alle Kategorien von Hand ändern. Mühselig!

1.2 Ich habe beispielsweise eine Webseite mit mehr als 300 Kategorien. Wenn nun eine Konfiguration bzw. eine Template-Vorkonfiguration geändert werden soll, muss ich das alles von Hand machen. Da mir das wirklich über den Kopf wächst, mache ich das dann mit phpMyAdmin und einer Reihe von SQL-Queries.

2. Ich würde mich unglaublich freuen, wenn man den tinyMCE auf Benutzer- oder Gruppen-Basis konfigurieren könnte. Welche Knöpfe der Benutzer haben darf, welche Klassen, Stile, Tags etc. der Benutzer haben darf.

2.1 Ich fand es beispielsweise höllisch unpraktisch, daß in der editorclass.php Element-ids auf Tags nicht implementiert waren. Gerade bei DOM-Funktionen oder barrierefreien Artikelvorlagen benötigt man die ids eines Elements. Ich habe editorclass.php von Hand dahingehend ändern müssen.

2.2 Ich kann mir vorstellen, daß es wahnsinnig aufwendig ist, alle Konfigurationsmöglichkeiten des tinyMCE anzubieten und zu implementieren. Aber ich denke es lohnt sich sehr und daher biete ich meine Hilfe an.

Vielen Dank

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: mehrere Kategorien konfigurieren und tinyMCE-Konfigurati

Beitrag von Dodger77 » Sa 12. Mai 2007, 12:03

stefan25376 hat geschrieben:2 Dinge sind mir aufgefallen:

1. Sowohl in der alten als auch in der topaktuellen Version gibt es keine Möglichkeit mehrere Kategorien gleichzeitig zu konfigurieren (Templates). Folgende Szenarien:

1.1 Ich muss Navigations-Module ggf. testen. Dazu müssen aber erst Kategorien angelegt werden. Wenn ich etwas an der Konfiguration bzw. an der Template-Vorkonfiguration ändere, muss ich anschließend alle Kategorien von Hand ändern. Mühselig!

1.2 Ich habe beispielsweise eine Webseite mit mehr als 300 Kategorien. Wenn nun eine Konfiguration bzw. eine Template-Vorkonfiguration geändert werden soll, muss ich das alles von Hand machen. Da mir das wirklich über den Kopf wächst, mache ich das dann mit phpMyAdmin und einer Reihe von SQL-Queries.
Einige der neuen Navigationsmodule bieten mittlerweile eine Konfiguration der Startkategorie per Mandanteneinstellung an. Die gilt dann für alle Kategorien, in denen diese nicht von Hand konfiguriert wird. Damit ist zumindest der Teil ganz gut abgehandelt.
stefan25376 hat geschrieben:2. Ich würde mich unglaublich freuen, wenn man den tinyMCE auf Benutzer- oder Gruppen-Basis konfigurieren könnte. Welche Knöpfe der Benutzer haben darf, welche Klassen, Stile, Tags etc. der Benutzer haben darf.
Kann man:

http://www.contenido.org/forum/viewtopic.php?t=13840

Das geht mit System-, Mandanten-, Gruppen- oder Benutzereinstellungen. Interessant dazu ist auch die Datei "docs/techref/backend/backend/backend.customizing.html" und natürlich:

http://wiki.moxiecode.com/index.php/Tin ... figuration

stefan25376
Beiträge: 40
Registriert: Mi 15. Jun 2005, 09:40
Wohnort: Schwerte
Kontaktdaten:

Beitrag von stefan25376 » Sa 12. Mai 2007, 16:04

Hallo Dodger77,

Vielen Dank für die Anwort.

Ich muss sagen, daß das Problem mit dem mehrfachen Konfigurieren von Kategorien mich eigentlich schon immer stört und meiner Meinung nach der größte Zeitfresser in meinen Jobs ist. Contenido ist sonst ein schönes, schnelles und flexibles System.

Was den tinyMCE angeht gebe ich Dir recht. Das funktioniert. Nur nicht wirklich elegant. Und bei Jobs mit 100 Benutzern wird es unübersichtlich. Darüberhinaus müßte ich mir ständig merken, was welche Variable bedeutet.

Ich habe in der Vergangenheit für mich FCKeditor integriert und diesen einfach Benutzer-spezifisch mit Konfigurationsdateien gespeist. Hat mich trotzdem immer gestört und war nie elegant gelöst.

Das Schöne beim tinyMCE ist ja, das man ALLES elegant konfigurieren kann und vor allem Benutzerfunktionen nutzen kann. Warum also die Power des Editors ungenutzt lassen und mit umständlichen Wegen, wie in dem Post beschrieben, arbeiten?

Ich denke ich MUSS dazu in den nächsten Tagen was entwickeln, da ich das so nicht zusammen mit meinen Geschäftspartner nutzen kann. Die können bei Benutzererstellung keine tinyMCE-Dokumentation lesen, um dann per Hand Variablen einzubauen. Geht einfach nicht!

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Sa 12. Mai 2007, 16:35

Meiner Meinung nach läuft die Konfiguration über die System-, Mandanten-, Gruppen- oder Benutzereinstellungen für die Konfigurationsmöglichkeiten, die zur Zeit bei der TinyMCE-Integration in Contenido berücksichtigt sind, ausreichend komfortabel. Das wird ja in der Regel der Sysadmin erledigen, der schließlich auch PHP können sollte.
stefan25376 hat geschrieben:Warum also die Power des Editors ungenutzt lassen und mit umständlichen Wegen, wie in dem Post beschrieben, arbeiten?
Was genau so umständlich ist, müsstest du nochmal erläutern.

Bei benutzerspezifischen Einstellungen lässt sich das auch sehr schön über Gruppen lösen. Mandantenadmins können dann einfach einzelne Benutzer der entsprechenden Gruppe zuordnen und fertig ist die Laube.

Ich habe allerdings auch schon daran gedacht, die "editorclass.php" dahingehend anzupassen, dass alle TinyMCE-Konfigurationseinstellungen zur Verfügung stellen. Das dürfte nicht allzu wild sein.

stefan25376
Beiträge: 40
Registriert: Mi 15. Jun 2005, 09:40
Wohnort: Schwerte
Kontaktdaten:

tinyMCE Konfigurationen vollständig anbinden

Beitrag von stefan25376 » So 13. Mai 2007, 18:25

Hallo Dodger77,

Super! Genau das habe ich heute nämlich auch gedacht. Ich wollte für einen Kunden Das tinyMCE-Template-Plugin anbinden und mußte feststellen, daß:

1. Dieses Plugin bei der in Contenido 4.6.15 enthaltenen tinyMCE-Version nicht enthalten ist. Daher werde ich bald einen Patch für die neueste Version mit allen verfügbaren Plugins anbieten.

2. Die Anbindung dieses Plugins in editorclass.php noch nicht realisiert ist.

Ich schlage daher eine Zusammenarbeit vor. Wenn wir die editorclass.php so realisieren könnten, daß sie alle möglichen Konfigurationen anbietet und dabei abwärtskompatibel bleibt, könnten wir die neue editorclass.php direkt mit der neuesten tinyMCE-Version bündeln und einen Patch veröffentlichen.

Das würde mich sehr nach vorn bringen! Wie gesagt habe ich bisher Contenido 4.4.5 mit einer eigenen FCKeditor-Integration genutzt und FCKeditor bietet von Haus aus eine tolle Vorlagen-Engine an. Wäre toll wenn meine Kunden auf Vorlagen zurückgreifen könnten. Hat für etwas unbedarfte Benutzer immer so ein "Word-Vorlagen"-Flair.

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: tinyMCE Konfigurationen vollständig anbinden

Beitrag von Dodger77 » So 13. Mai 2007, 19:54

stefan25376 hat geschrieben:1. Dieses Plugin bei der in Contenido 4.6.15 enthaltenen tinyMCE-Version nicht enthalten ist. Daher werde ich bald einen Patch für die neueste Version mit allen verfügbaren Plugins anbieten.

2. Die Anbindung dieses Plugins in editorclass.php noch nicht realisiert ist.
Das mit den Plugins finde ich so ganz praktisch, dass man sich die selbst herunterladen kann. Und für die Integration braucht man doch gar nicht an die "editorclass.php" ran. Das kann man doch einfach über die Einstellung:

Code: Alles auswählen

wysiwyg    tinymce-plugins
konfigurieren. Dabei muss man sich natürlich am Standardwert (siehe "editorclass.php") orientieren. Siehe dazu bitte wie oben schon angesprochen die Datei:

"docs/techref/backend/backend/backend.customizing.html"

Dabei sind z. B. interessant:

Code: Alles auswählen

wysiwyg    tinymce-toolbar-mode    custom
wysiwyg    tinymce-toolbar1
stefan25376 hat geschrieben:Ich schlage daher eine Zusammenarbeit vor. Wenn wir die editorclass.php so realisieren könnten, daß sie alle möglichen Konfigurationen anbietet und dabei abwärtskompatibel bleibt, könnten wir die neue editorclass.php direkt mit der neuesten tinyMCE-Version bündeln und einen Patch veröffentlichen.
Ich habe mir dazu schon Gedanken gemacht, aber so ganz einfach wird das wahrscheinlich nicht. Schön wäre es, wenn es ähnlich der Funktion "getEffectiveSetting()" eine Möglichkeit gäbe, alle wirksamen System-, Mandanten-, Gruppen- und Usereinstellungen auszulesen.

stefan25376
Beiträge: 40
Registriert: Mi 15. Jun 2005, 09:40
Wohnort: Schwerte
Kontaktdaten:

getEffectiveSettingsByType() oder so

Beitrag von stefan25376 » Mo 14. Mai 2007, 06:42

Hallo Dodger77,

Ich glaube ich habe mich etwas unklar ausgedrückt. ;-)

Code: Alles auswählen

Typ: wysiwyg
Name: tinymce-plugins
und

Code: Alles auswählen

Typ: wysiwyg
Name: tinymce-toolbar-mode
Wert: custom

Typ: wysiwyg
Name: tinymce-toolbar1
sind mir bekannt. Das Problem ist, daß das Template-Plugin eine Reihe von zusätzlichen Einstellungen braucht. Siehe hierzu: http://wiki.moxiecode.com/index.php/Tin ... s/template

Ich hatte auch schon an etwas wie getEffectiveSettingsByType() gedacht. Da könnte man dann alle Einstellungen für den Typ "wysiwyg" auslesen und in editorclass.php setzen. Ich schaue mir das heute mal an.

stefan25376
Beiträge: 40
Registriert: Mi 15. Jun 2005, 09:40
Wohnort: Schwerte
Kontaktdaten:

getEffectiveSettingsByType fertiggestellt

Beitrag von stefan25376 » Mo 14. Mai 2007, 10:15

Hallo Dodger77,

Ich habe die Funktion getEffectiveSettingsByType() fertiggestellt. War gar nicht soooooooo einfach, aber klappt jetzt. Hier die Ergänzungen in diversen Dateien:

/includes/functions.general.php

Code: Alles auswählen

/**
 * Gets system property entries
 *
 * @param string $type The type of the item
 * @return array Value
 */
function getSystemPropertiesByType($type)
{
	global $db_systemprop, $cfg;

	$result = array();

	if (!is_object($db_systemprop))
	{
		$db_systemprop = new DB_Contenido;
	}

	$sql = "SELECT name,value FROM ".$cfg["tab"]["system_prop"]." WHERE type='$type'";
	$db_systemprop->query($sql);

	while ($db_systemprop->next_record())
	{
		$result[$db_systemprop->f("name")] = urldecode($db_systemprop->f("value"));
	}

 	return $result;

}

/**
 * Returns the current effective settings for a type of properties.
 *
 * The order is:
 * System => Client => Group => User
 *
 * System properties can be overridden by the group, and group
 * properties can be overridden by the user.
 *
 * @param string $type The type of the item
 * @return array Value
 */
function getEffectiveSettingsByType($type)
{
	global $auth, $client;

	$result = getSystemPropertiesByType($type);

	cInclude('classes', 'contenido/class.client.php');
	$oClient = new cApiClient($client);
	$result = array_merge($result,$oClient->getPropertiesByType($type));

	if ($auth->auth["uid"] != "nobody")
	{
		cInclude('classes', 'class.user.php');

		$user = new User;
		$user->loadUserByUserID($auth->auth["uid"]);

		$result = array_merge($result,$user->getUserPropertiesByType($type, true));
	}

	return $result;
}
/classes/class.user.php

Code: Alles auswählen

/**
     * getUserPropertiesByType($type)
     * Stores the modified user object to the database
	 * @param string type Specifies the type (class, category etc) for the property to retrieve
	 * @param boolean group Specifies if this function should recursively search in groups
	 * @return array The value of the retrieved property
     */
    function getUserPropertiesByType ($type, $group = false)
	{
		global $cfg, $perm;

		if (!is_object($perm))
		{
			$perm = new Contenido_Perm;
		}

		$result = array();

		if ($group == true)
		{
			$groups = $perm->getGroupsForUser($this->values['user_id']);

			if (is_array($groups))
			{
    			foreach ($groups as $value)
    			{
    				$sql = "SELECT name, value FROM " .$cfg["tab"]["group_prop"]."
    				WHERE group_id = '".$value."'
    			      AND type = '$type'";
    				$this->db->query($sql);

    				while ($this->db->next_record())
    				{
    					$result[$this->db->f("name")] = urldecode($this->db->f("value"));
    				}
    			}
			}
		}

		$sql = "SELECT name, value FROM " .$cfg["tab"]["user_prop"]."
				WHERE user_id = '".$this->values['user_id']."'
			      AND type = '$type'";
		$this->db->query($sql);

		while ($this->db->next_record())
		{
			$result[$this->db->f("name")] = urldecode($this->db->f("value"));
		}

        	return $result;
	}

/classes/contenido/class.client.php

Code: Alles auswählen

function getPropertiesByType($mType)
	{
		/* Runtime on-demand allocation of the properties object */
		if (!is_object($this->properties))
		{
			$this->properties = new PropertyCollection;
			$this->properties->changeClient($this->idclient);
		}

		return $this->properties->getValuesByType('clientsetting', $this->idclient, $mType);
	}

/classes/class.properties.php

Code: Alles auswählen

/*
	 * Returns the value for a given item.
	 *
	 * Example:
	 *
	 * $file = $properties->getValuesByType("idcat", 27, "visual");
	 *
	 * @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)
	 * @return array Value
	 */
	function getValuesByType ($itemtype, $itemid, $type)
	{
		$result = array();

		if (isset($this->client))
		{
			$this->select("idclient = '".$this->client."' AND itemtype = '$itemtype' AND itemid = '$itemid' AND type = '$type'");
		} else {
			$this->select("itemtype = '$itemtype' AND itemid = '$itemid' AND type = '$type'");
		}

		while ($item = $this->next())
		{
			$result[$item->get("name")] = urldecode($item->get("value"));
		}

		return $result;
	}
Der Einfachheit halber habe ich die geänderten Dateien gezippt. Hier das Archiv: http://www.handgestrickt.biz/bblog/file ... _patch.zip

Im nächsten Schritt müßte jetzt die Datei editorclass.php mit folgender Funktion versehen werden

Code: Alles auswählen

getEffectiveSettingsByType("wysiwyg")

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mo 14. Mai 2007, 12:36

Das sieht gut aus. Werde ich heute Abend oder morgen mal testen. Für die "editorclass.php" fände ich ja ein:

Code: Alles auswählen

getEffectiveSettingsByType("tinymce")
schöner. So ließen sich die TinyMCE-Einstellungen direkt per:

Code: Alles auswählen

tinymce    EINSTELLUNG    WERT
vornehmen. Der Teil funktioniert bei mir im Prinzip schon:

in der Funktion "getEditor()" folgendes ergänzen:

Code: Alles auswählen

		$this->_aProperties = getEffectiveSettingsByType("tinymce");
		foreach ($this->_aProperties as $key => $value) {
		  if (strtolower($value) == "true" || strtolower($value) == "false") $tinymceconfig = $key . ' : ' . $value . ',';
		  else $tinymceconfig = $key . ' : "' . $value . '",';
      $tpl->set('d', 'TINYMCECONFIG', $tinymceconfig);
      $tpl->next();
    }
und in der "tinymce.tpl.html" unter:

Code: Alles auswählen

				{CLEANUPCALLBACK}

Code: Alles auswählen

				<!-- BEGIN:BLOCK -->
				{TINYMCECONFIG}
        <!-- END:BLOCK -->

stefan25376
Beiträge: 40
Registriert: Mi 15. Jun 2005, 09:40
Wohnort: Schwerte
Kontaktdaten:

Typ nach tinymce ändern

Beitrag von stefan25376 » Mo 14. Mai 2007, 13:59

Hallo Dodger77,

Ich persönlich fände als Typ "tinymce" auch besser, da man dann verschiedene WYSIWYGs unterschiedlich konfigurieren könnte und die Eindeutigkeit erhöht wäre.

Ich kann allerdings nicht einschätzen inwieweit dadurch die Kompatibilität gewährleistet wäre... Falls Leute den Patch anwenden wollten, müßten Sie alle Konfigurationen ändern.

Bisher habe ich lieber FCKeditor benutzt, obwohl der schwerer zu integrieren ist. Gerade die Templates in FCKeditor sind immer super angekommen bei den Kunden bzw. Redakteuren. Zukünftig würde ich mich dann eventuell wieder an einer FCKeditor-Integration versuchen. Ist immer schön, die Wahl zu haben.

Gesperrt