CMS Made Simple Forums
https://forum.cmsmadesimple.org/

(Gelöst) Backend um Option in der Seitenerstellung erweitern
https://forum.cmsmadesimple.org/viewtopic.php?f=31&t=32504
Page 1 of 6

Author:  Foaly* [ Sun Mar 29, 2009 6:53 pm ]
Post subject:  (Gelöst) Backend um Option in der Seitenerstellung erweitern

Hallo,

Gibt es eine Möglichkeit, das Backend in der gleichen Weise um ein Optionsfeld (Checkbox o.ä.) zu erweitern, wie mit den content_image Blöcken um ein Bildauswahlfeld? Ich habe mich gestern eine Weile damit beschäftigt, alle Module durchzusehen und nach einem gesucht, dass das evtl. möglich macht, so wie das beim News Modul funktioniert. Das man also global für alle Seiten zusätzliche Optionsfelder schafft.

Die Freifelder helfen mir in dem Fall nicht weiter, da es wirklich um simple boolesche Werte geht.

Danke an alle Helfenden :)

Author:  tramp [ Mon Mar 30, 2009 7:03 am ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

Das würde ich auch gerne wissen.

Author:  NaN [ Mon Mar 30, 2009 10:03 am ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

Wäre im Prinzip recht einfach umzusetzen.
Allerdings gibts da leider keine so komfortable Funktion wie beim News-Modul.
Dazu müsste man den Inhaltstyp "Content" modifizieren. (/lib/classes/contenttypes/content.inc.php)
Weiß nicht wie fit Du in Sachen PHP bist.
Hab sowas schonmal gemacht, find den Code gerade nicht.

Sag bescheid, wenn ich was finde.
 

Author:  Foaly* [ Tue Mar 31, 2009 5:15 pm ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

Hallo NaN,

vielen Dank für deine Antwort! Ich bin in PHP sehr fit, jedoch erst neu in das System eingestiegen, sodass ich aktuell keine Zeit habe, mich um eine Eigenentwicklung zu kümmern. Das System soll ja auch schön updatebar sein ;)

Da du aber dagegen sehr firm mit dem System zu sein scheinst, könntest du evtl Interesse an dem Jobangebot haben: http://forum.cmsmadesimple.org/index.ph ... 9.html#new

Author:  NaN [ Tue Mar 31, 2009 6:31 pm ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

Sowas würd ich auch für lau machen.
Sind wirklich nicht viel Zeilen Code.
Und das System bleibt in jedem Fall updatebar, da Du lediglich einen neuen Inhaltstyp hinzufügen würdest.
Hab allerdings das Problem, dass mein Rechner gerade seine Festplatte nicht mehr erkennen will (natürlich die, wo die wichtigen Daten drauf sind...), sodass ich die nächsten Tage wohl mehr damit beschäftigt bin, das zu retten, was noch zu retten ist...

Edit:

Ach was solls!
Hab im Anhang mal eine modifizierte Version des regulären Inhaltstyps "Content".
Die Datei sollte man einfach in den Ordner /lib/classes/contenttypes/ kopieren und dann beim Bearbeiten/Erstellen einer Seite im Dropdownfeld den Inhaltstyp "Content 2" auswählen können.
Dann sollte da eine weitere Checkbox sein.
Habs noch nicht testen können.
(nach dem download die Endung ".mpg" entfernen)

Wem "Content 2" nicht gefällt, der muss im Quellcode in den Zeilen 44-56 die Funktion FriendlyName() entsprechend ändern.
Hab im Quellcode ausreichend Kommentare hinterlassen, die hoffenltich ein wenig Licht ins Dunkel bringen (einfach nach "added by NaN" suchen).

Achja, fast hätte ich es vergessen!
Ich hab kein Plan wie man an die neu hinzugefügte Eigenschaft vom Template aus rankommt außer mit einem UDT wie z.B. {get_content_props}.

Hoffe es klappt.

Edit (07.08.2009):
Vergesst was da oben steht. Im Anhang gibts inzwischen die fertigen Versionen ;)

Attachments:
[The extension mpg has been deactivated and can no longer be displayed.]
[The extension mpg has been deactivated and can no longer be displayed.]

Author:  nhaack [ Tue Mar 31, 2009 8:10 pm ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

das wünsche ich mir schon seit Beginn meiner CMSMS-Zeit. Am besten wäre eine Art Tag wie  {Content}... also z.b. {checkbox value="1,2,3,4,5," labels="eins,zwei,drei,vier,fünf"}...  oder das gleiche für Dropdowns, filepicker, date-picker, etc etc damit könnte man direkt in regulären Templates sehr flexible Optionen einbinden...

Quasi sowas wie der Image-Tag... aber ich habe mich mit dem Thema Content-Typen selbst noch nie beschäftigt und dies immer über reguläre Content-Blöcke gelöst. Werde mir mal den Code reinziehen... vielleicht ist das ja auch schon die Lösung :)

Wenn die Daten im Table content_props liegen, könnte man evtl. auch mit dem Content_Dump Plugin darauf zugreifen.

Beste Grüße
Nils

Author:  Foaly* [ Tue Mar 31, 2009 9:43 pm ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

He NaN,

Ganz große Klasse dein neuer Inhaltstyp! Ich habe jetzt alle benötigten Checkboxen angelegt und es funktioniert zusammen mit dem UDT prächtig! Auch sehr gut mit den Beschreibungstexten, ich schätze das sehr :)

Viele Grüße aus dem sonnigen Schwarzwald

Author:  NaN [ Tue Apr 14, 2009 2:56 pm ]
Post subject:  Re: Backend um Option in der Seitenerstellung erweitern

nhaack wrote:
das wünsche ich mir schon seit Beginn meiner CMSMS-Zeit. Am besten wäre eine Art Tag wie  {Content}... also z.b. {checkbox value="1,2,3,4,5," labels="eins,zwei,drei,vier,fünf"}... 


Hab da schon was in Arbeit.
Gibts demnächst zum Download.

Author:  nhaack [ Tue Apr 14, 2009 5:44 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

Das wäre der absolute Knüller... könnte es just für ein aktuelles Projekt nutzen.  Hab's leider bis jetzt versäumt mir deine erstgenannte Modifikation mal anzugucken... tz tz tz..

Beste Grüße
Nils

Author:  NaN [ Wed Apr 15, 2009 12:44 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

So,

hier mal ein neuer Inhaltstyp (Inhalt 2) + Plugin ({content2}). (siehe Anhang)

Das Plugin und der zugehörige Inhaltstyp sind Modifikationen des regulären Plugins {content} bzw. Inhaltstyps "Inhalt".
Der Inhaltstyp kombiniert unter anderem die beiden Tags {content} und {content_image}.
Das Plugin {content2} ist optional und nur nötig, wenn man die volle Funktionalität des {content_image}-Plugins zusammen mit dem Inhaltstyp "Inhalt 2" verwenden möchte.
(Der Tag {content_image} funktioniert derzeit nicht mit dem neuen Inhaltstyp; ließe sich bei Bedarf aber noch ändern)
Desweiteren lassen sich über Parameter weitere Optionen für den Inhaltstyp hinzufügen.

Im Prinzip funktionieren alle zusätzlichen Felder wie eigene Inhaltsblöcke.
Das hat den Vorteil, dass man kein zusätzliches Plugin benötigt um an die Daten der zusätzlichen Felder heranzukommen.
Die werden einfach mit dem Plugin {content} mit ausgegeben.

D.h. mit dem Parameter "block" können ja bisher im Backend weitere Editor-Felder erzeugt werden.
Ich habe das ganze so umgeschrieben, dass man damit jede Art von Input-Feld erzeugen kann.
Die Art des Feldes wird über einen weiteren Parameter "type" definiert.
(default ist "text" d.h. ein Textarea mit WYSIWYG-Editor; weitere Möglichkeiten sind image, checkbox, dropdown und select_mutliple)

Weiterhin kann man sich über die Parameter "block_tab" und "page_tab" den Aufbau des Backends selber zusammenstellen.
Mit "page_tab" kann man festlegen in welchem Tab der Inhaltsblock angezeigt werden soll.
Man könnte rein theoretisch mit {content page_tab='options' ... } im Tab "Optionen" weitere Checkboxen oder Editor-Felder anzeigen lassen.
Existiert im Backend kein mit "page_tab" angegebener Tab, wird einfach einer erstellt.
Somit kann ich einen eigenen Tab erstellen, in dem weitere Optionen verfügbar sind.

Mit dem Parameter "block_tab" kann ich innerhalb eines Tabs weitere Tabs erstellen lassen.
Somit kann man zusätzliche Inhaltsblöcke/Optionen innerhalb eines Tabs zu weiteren Tabs gruppieren.

Insgesamt lässt sich damit etwas mehr Übersichtlichkeit im Backend erreichen.

Anwendungsbeispiel:

Code:

{content block_tab="Hauptinhalt" label="Inhalt"}
{content block_tab="Inhaltsblock 2" label="zweiten Block im Frontend anzeigen" type="checkbox" checked="true" assign="show_block2"}
{if $show_block2!=''}
{content block_tab="Inhaltsblock 2" label="Inhalt 2"}
{/if}



Damit werden im Backend im Tab "Hauptmenü" zwei weitere Tabs angezeigt.
Ein Tab "Hauptinhalt" mit WYSIWYG-Editor und ein Tab "Inhaltsblock 2" mit einer Checkbox und einem weiteren WYSIWYG-Editor.
Mit Hilfe der Checkbox kann man individuell für jede Seite, die auf diesem Template beruht, festlegen, ob der zweite Block (egal ob er etwas beinhaltet oder nicht) angezeigt werden soll.


Welche Parameter sind noch möglich?

Eigentlich alle, die auch beim normalen Inhalt möglich sind.
Für genauere Beschreibung schaut in die Taghilfe des content-Tags oder des content2-tags.

block (optional)
über diesen Parameter kann mehr als ein Inhaltsblock auf einer Seite erstellt werden.

wysiwyg (true/false) (optional)
Ein-/Ausschalten des Editors für die Bearbeitung.

oneline (true/false) (optional)
Zeigt beim Bearbeiten für den Inhalt ein einfaches Input-Feld an ()

value (optional)
Standardinhalt beim Erstellen einer neuen Seite. (funktioniert nur bei Blocktyp "text")

type (text,image,checkbox,dropdown,select_multiple) (optional)
Mit diesem Parameter kann bestimmt werden, welche Form der Inhalt hat.
Standard ist "text".

page_tab (optional)
Mit diesem Parameter kann festgelegt werden in welchem Tab der Inhaltsblock im Backend angezeigt werden soll.
Mögliche Werte sind "main" ( = Tab "Hauptmenü"), "options" ( = Tab "Optionen"), oder jeder andere beliebige Wert.
Existiert im Backend kein Tab mit dem angegebenen Namen, wird er automatisch hinter dem Tab "Optionen" erstellt.

block_tab (optional)
Mit diesem Parameter können die Inhaltsblöcke innerhalb eines Tabs nochmals in Tabs unterteilt/gruppiert werden.

label (optional)
Eingabeaufforderung für diesen Inhaltsblock.

assign (optional)
Mit diesem Parameter kann der Inhalt einer Smarty-Variablen zugewiesen werden.

Parameter für Blocktyp "checkbox":

checked (true/false) (optional)
Aktiviert/Deaktiviert die Checkbox beim Bearbeiten der Seite, wenn der Inhaltsblock vom Typ 'checkbox' ist.

Parameter für Blocktyp "dropdown"/"select_multiple":

items (optional)
Elemente des Dropdownfeldes/der Mehrfachauswahl beim Bearbeiten der Seite, wenn der Inhaltsblock vom Typ 'dropdown' oder 'select_multiple' ist. (mehrere Elemente duch Komma getrennt)

selected (optional)
Bereits ausgewählte Elemente des Dropdownfeldes/der Mehrfachauswahl beim Bearbeiten der Seite, wenn der Inhaltsblock vom Typ 'dropdown' oder 'select_multiple' ist. (mehrere Elemente duch Komma getrennt)

size (ganzzahl) (optional)
Höhe der Mehrfachauswahl beim Bearbeiten der Seite, wenn der Inhaltsblock vom Typ 'select_multiple' ist.

Parameter für Blocktyp "image":

(siehe Tag-Hilfe {content_image})



Verbesserungsvorschläge sind immer willkommen.
Im Anhang die Endung ".mpg" entfernen und dann entpacken.
Im Archiv sind zwei php-Dateien: function.content2.php und content2.inc.php
Die Datei content2.inc.php einfach ins Verzeichnis /lib/classes/contenttypes/ kopieren.
Die Datei function.content2.php einfach ins Plugin-Verzeichnis kopieren und die Inhalte im Template mit {content2} aufrufen (dieses Plugin ist optional, der Inhaltstyp funktioniert auch mit dem regulären {content}-Tag; lediglich der Tag {content_image} funktioniert nicht mit diesem Inhaltstyp und für {content type="image" ... } wird nur der Pfad zum Bild ausgegeben)

Attachments:
Content2.inc.php.txt [37.86 KiB]
Downloaded 335 times
function.content2.php.txt [11.98 KiB]
Downloaded 420 times

Author:  Andiministrator [ Wed Apr 15, 2009 1:24 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

Saubere Arbeit, Gratulation!
Werde ich sicher bei dem ein oder anderen Projekt verwenden können :)

Author:  nhaack [ Wed Apr 15, 2009 4:12 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

Der Wahnsinn :)! Schönes Ding! Werde es direkt in der Entwicklung eines aktuellen Projektes testen und dann hoffentlich bald umfangreiches Feedback geben können.

*schnieef* ich bin so glücklich

Beste Grüße
Nils

Author:  nicmare [ Wed Apr 15, 2009 6:07 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

wow! sehr geil! ich werde es auch mal ausprobieren! danke dür

Author:  nhaack [ Wed Apr 15, 2009 7:50 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

Hallo NaN,

soweit so gut. Habe mir deine Modifikation einmal installiert - allerdings habe ich Probleme mit einigen Optionen. Vielleicht kannst du ja hierzu direkt etwas sagen (quasi wie John Wayne aus der Hüfte)...

Z.B. wenn ich mehrere Block-Elemente mit dem Parameter page_tab verwende, erhalte ich den gewünschten Tab mehrfach (Verwendung wie folgt)

{content2 block="test" type="checkbox" page_tab="more" label="Kommentare Anzeigen"}
{content2 block="test2" type="checkbox" page_tab="more" label="Auf Homepage Teasern"}

Zudem werden die Werte nicht gespeichert (bei type=text allerdings schon). Ich verwende CMSMS 1.5.4. unter PHP 5.2.9 und mySQL 4.0.27 (hier gab's im System aber ein gelbes Ausrufezeichen).

Ich werde versuchen, das System nochmal mit einer aktuelleren mySQL Version zu installieren um zu schauen, ob das Speicherproblem dann gelöst wird. Hat jemand anderes diese Probleme ebenfalls?

Nichts desto trotz ist dies für mich bereits jetzt eines der coolsten CMSMS Plug-ins. Da ich sehr viel mit in den Seiten selbst gespeicherten Werten für zusätzliche Funktionen arbeite ist dies das "Killer Feature" für "meine" Editoren, für die die Bedienung noch einfacher und übersichtlicher wird. Danke!

Beste Grüße
Nils

Author:  Foaly* [ Wed Apr 15, 2009 10:23 pm ]
Post subject:  Re: (Gelöst) Backend um Option in der Seitenerstellung erweitern

Hallo NaN,

Du hast denke ich nicht nur mir, sondern allen Nutzern von CMSms einen großen Gefallen getan und wie ich finde das CMS um ein entscheidendes Stück in seiner Flexibilität nach vorn gebracht! Ich hoffe sehr, dass nach dem Interesse des Dev Teams dein Inhaltstyp dann auch in den Core übergehen wird, damit das auch wirklich dem Letzten zugängloich gemacht wird! Vielen Dank dafür..

Ein kleiner Fehler hat sich allerdings im Code eingestellt.. Die Klasse hat mit der Benennung Content2 keinen Konstruktor mehr ;) Außerdem zwei weitere kleine Punkte:
  • Du hast nicht die aktuellste Version vom Basis-Inhaltstyp verwendet. Merkt man z.Bsp. daran, dass der Standardbildblock nicht im Optionstab ist.
  • Das {content} tag ohne Parameter für den eigentlichen Seiteninhalt funktioniert nicht mehr.

// Edit: Ich habe mir den Code genauer angeguckt, ein Test ohne {content2} schlug allerdings fehl! Aber deine Änderungen habe ich gleich in den Inhaltstyp Content vom 02.04. integriert. Im Anhang ist die upgedatete Version.

In Zeile 308f schreibst du
Quote:
# removed the default content block

Hatte doch eigentlich seinen Sinn? ;)
Den Zusammenhang mit dem {content2} tag und deinem Kommentar in Zeile 774 versteh ich dann allerdings nicht ganz
Quote:
# since we also need to get the default content tag

Aber an der Stelle wäre wahrscheinlich ein bisschen Nacharbeit und Verzicht auf das Plugin als Resultat sinnvoll :)

Hab aber mal deine Änderungen 1:1 übernommen, um dir nicht ins Werk zu pfuschen und keine Kompatibilitätsprobleme mit deinem Plugin zu schaffen.

Attachments:
Content2.inc.php.txt [32.16 KiB]
Downloaded 363 times

Page 1 of 6 All times are UTC
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/