Verwendung von Konstanten

Ideen für neue Funktionen in CONTENIDO?
Antworten
McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Verwendung von Konstanten

Beitrag von McHubi » Do 10. Dez 2015, 10:19

Hallo zusammen,

gibt es eine Möglichkeit, im Backend "Konstanten" zu deklarieren, die dann bei der Ausgabe im Frontend durch den eigentlichen Wert ersetzt werden? Sprich:

Konstantenname: allgemeine_telefonnummer
Konstanteninhalt: <a href="tel:+49123456789" target="_blank" title="anrufen">01234 56789</a>

In Modulen, Templates und im Tiny dann zum Beispiel das hier eintragen:
"Sie erreichen uns unter ###allgemeine_telefonnummer###."
und im FE wird dann das hier ausgegeben:
"Sie erreichen uns unter 01234 56789."

Per JS könnte man sowas hier machen:

Code: Alles auswählen

if(!$contenido)
  {
  ?>
  <script type="text/javascript">
	  document.body.innerHTML = document.body.innerHTML.replace('###allgemeine_telefonnummer###','<a href="tel:+49123456789" target="_blank" title="anrufen">01234 56789</a>');
  </script>
  <?php
  }
Sinnvoller wäre es natürlich, wenn die Seitenausgabe direkt mit den Konstanteninhalten erfolgt. Vor allem, weil im Quelltext der Seite immer noch

Code: Alles auswählen

<!-- content_text -->
###allgemeine_telefonnummer###
<!-- /content_text -->
steht, so wie die Seite vom Server ursprünglich ausgeliefert wurde.

:arrow: Mandanteneinstellungen "aufbohren"? Nur, wie?

VG,

Markus
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4249
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von Oldperl » Do 10. Dez 2015, 12:06

Servus Markus,

so etwas sollte dann entweder im Seitenparser oder in der Template-Klasse passieren. Eventuell wäre da sogar ein PlugIn sinnvoll, in dem man dann entsprechende Felder und Definitionen anlegen kann.

Man kann sich aber momentan auch mit System- und/oder Mandanteneinstellungen behelfen. Einfach einen entsprechenden Eintrag, beispielsweise beim Mandanten sprachabhängig, eintragen:

Code: Alles auswählen

textconstante  |  allgemeine_telefonnummer  |  <a href="tel:+49123456789" target="_blank" title="anrufen">01234 56789</a>
und dann im Modul beispielhaft per

Code: Alles auswählen

$tpl->set("s", "TELEFON", getEffectiveSetting("textconstante", "allgemeine_telefonnummer", "hier ein Default-Wert falls Einstellung leer"); 
Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von McHubi » Do 10. Dez 2015, 12:12

Hallo Ortwin,

Danke Dir für die Modul-Snippets. Dort ist das ja "kein Thema". Es wäre allerdings schön, wenn diese Konstanten auch bei anderen Inhalten greifen - sprich, im Tiny erfasste Texte. Das ist der Casus Knaktus. Die Lösung über ein Plugin für eine zentrale Konstantenverwaltung halte ich auch für die beste Herangehensweise. Wie das Ganze aber hinsichtlich Seitenparser laufen soll... Keine Ahnung.

Änderungen am Core? :arrow: 4fb ist gefragt. Denn gerade bei größeren Websites bieten sich oft Konstanten an, um wiederkehrende Informationen zentral pflegen zu können statt dutzende Webartikel durchsuchen und einzeln anpassen zu müssen wenn sich was ändert. Insofern halte ich das zumindest für eine sehr wichtige Funktionalität eines CMS, die in Contenido noch fehlt.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von frederic.schneider_4fb » Do 10. Dez 2015, 12:22

Lieber Markus, lieber Ortwin,

wir haben das eben bei uns diskutiert:
Als Core-Funktion bzw. dann ja als von uns zur Verfügung gestelltes Plugin, was m. E. auch die eleganteste Lösung für diese Option wäre, werden wir solche Konstanten nicht übernehmen.

Neben der von Ortwin vorgeschlagenen Option wäre es, je nach Fall natürlich, auch möglich, mit kleinen Artikeln zu arbeiten und diese via Article-Include zu inkludieren.
Frederic Schneider
Entwickler bei der four for business AG

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von McHubi » Do 10. Dez 2015, 12:49

Hallo Frederic,
Als Core-Funktion bzw. dann ja als von uns zur Verfügung gestelltes Plugin, was m. E. auch die eleganteste Lösung für diese Option wäre, werden wir solche Konstanten nicht übernehmen.
Das ist sehr schade. Oder fehlt da ein "noch"? :wink:
Oder lässt sich - als Zwischenlösung - der Seitenparser anpassen um auch im Tiny-Content Werte aus den Mandanteneinstellungen zu übernehmen?

Typ: constant
Name: ###testkonstante###
Wert: Hallo Welt!
mit kleinen Artikeln zu arbeiten und diese via Article-Include zu inkludieren.
Nur, um eine Telefonnummer oder €-Beträge oder whatever innerhalb eines Satzes oder einer Tabelle zu tauschen? Äh.... Nein. Das ist nicht nur aus Redakteurssicht unvermittelbar.

Hm...

Ich vergleich das Ganze Thema einfach mal mit CSS - Hier legt auch kein Mensch mehr im Editor fest, das die Überschrift grün ist für den Fall, dass sie mal blau werden soll. Ähnlich sieht es bei einem aktuellen Projekt aus: Website für eine Körperschaft des öffentlichen Rechts, bei der in diversen Webartikeln Rechengrößen angegeben werden, die sich in regelmäßigen Abständen ändern. Hier jedes Mal alle Artikel raussuchen und manuell ändern zu müssen ist das SEHR unschön. Per Konstanten wäre das ratzfatz erledigt. Der Seitenblick auf TYPO3 verrät: dort gibt es das und in meinen Augen auch nicht ohne Grund. :wink:
Zuletzt geändert von McHubi am Do 10. Dez 2015, 12:53, insgesamt 1-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von frederic.schneider_4fb » Do 10. Dez 2015, 12:52

McHubi hat geschrieben:Das ist sehr schade. Oder fehlt da ein "noch"? :wink:
Das "Nein" steht jetzt erst einmal ;). Ob wir vielleicht in einigen Monaten darüber anders denken, kann ich Dir nicht sagen. Es ist zumindest nicht so, dass wir aus Prinzip nein sagen, sondern wir diskutieren immer Aufwand und Nutzen.
Oder lässt sich - als Zwischenlösung - der Seitenparser anpassen um auch im Tiny-Content Werte aus den Mandanteneinstellungen zu übernehmen?
Wir werden in diesem Punkt generell am Core erst einmal nichts anpassen.
mit kleinen Artikeln zu arbeiten und diese via Article-Include zu inkludieren.
Nur, um eine Telefonnummer oder €-Beträge oder whatever innerhalb eines Satzes oder einer Tabelle zu tauschen? Äh.... Nein. Das ist nicht nur aus Redakteurssicht unvermittelbar.
Ja, da hast Du sehr recht! Deshalb ja auch mein Einschub "je nach Fall natürlich". Wenn Du aber z. B. komplette Adressfelder wiederkehrend irgendwo einfügen möchtest, könnte das wiederum m. E. eine ernsthafte Option sein :).
Frederic Schneider
Entwickler bei der four for business AG

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von McHubi » Do 10. Dez 2015, 12:56

Das "Nein" steht jetzt erst einmal ;). Ob wir vielleicht in einigen Monaten darüber anders denken, kann ich Dir nicht sagen. Es ist zumindest nicht so, dass wir aus Prinzip nein sagen, sondern wir diskutieren immer Aufwand und Nutzen.
Klar, ist ja auch nicht so dringend wie ein ordentlich querschießender Bug. Aber wenn das auf eurer Feature-Request Liste unter "nice to have" für kommende Versionen landet, wäre das doch schon was. :wink:

Bis dahin dann also ein Modul, was entsprechendes JS in den Footer packt und in der Konfiguration aktiviert werden kann falls im Webartikel eine Konstante im Tiny verwendet wird...
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von rethus » Fr 11. Dez 2015, 11:13

Ich würde es so machen:
  1. Du erstellst deine eigenen Mandanten-Variablen in der Form, wie du sie benötigst (so wie Oldperl es oben schon angeschnitten hat)
  2. Im Layout setzt du so ziemlich als ersten einen Container für dein (neues) Modul [z.B. BaseSettings].
  3. Du erstellst das neue Modul BaseSettings, in dem du die gesamte Programmlogik packst, die "DEINE" Mandantenvariablen ausliest.
    Du könntest z.B deinen Mandanten-Settings ja ein Präfix geben 'McH_'. Dann ließt du alle deine Mandantenvariablen ein, und speicherst Sie in die Contenido-Registry ("cRegistry::setAppVar oder cRegistry::getAppVar"). (siehe auch http://api.contenido.org/con498/class-cRegistry.html)
Da du dein Modul vor allen anderen lädst, kannst du somit aus allen anderen Modulen auf die Registry zugreifen und deine Variablen nutzen.

Ein Wort der Vorsicht:
Ich habe keine aktuellen Benchmarking-Test gemacht, weiß aber, das Contenido bereits sehr viel an Daten/Infos mitschleift (d.h. bei jedem Seitenaufruf laden, bzw. auf dem Server verarbeiten muss). Da dieser Overhead eh schon besteht solltest du sparsam mit der Registry umgehen, da dies den Footprint deiner Scripte und letztendlich die Performance deiner Seite beeinflussen kann. Ein Paar Strings werden da aber keine Probleme bereiten.

Du kannst im Layout auch direkt die Mandantenvariablen via PHP auslesen, da PHP im Layout interpretiert wird. So könntest du - wenn du obiges Modul geladen hast - in deinem Layout einfach ein <?php echo $mcH_telefonnr;?> nutzen.
Nicht 100% sauber, da php eigentlich nichts im HTML-Layout zu suchen hat, aber deine Platzhalten wären ja auch nicht sauber, da die eigentlich eher in die Smarty-Templates gehören würden.


Tipp am Rande, nutze anstatt $contenido die Abfrage cRegistry::isBackendEditMode, damit bist du "Future-Save" und "State of the Art"
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von McHubi » Fr 11. Dez 2015, 12:41

Hallo rethus,

Danke Dir für Dein Ideen! :D
Da du dein Modul vor allen anderen lädst, kannst du somit aus allen anderen Modulen auf die Registry zugreifen und deine Variablen nutzen.
Vielleicht ne blöde Frage, aber: Was ist dann mit Konstanten, die ich als Redakteur innerhalb des Tiny einsetzen möchte? In meinem Anwendungsszenario sollen wiederkehrende Daten in Fließtexten zentral hinterlegt werden können. Und ein <?php echo $mcH_telefonnr;?> im Tiny?
Tipp am Rande, nutze anstatt $contenido die Abfrage cRegistry::isBackendEditMode, damit bist du "Future-Save" und "State of the Art"
Jap. Richtig.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von Zuschauer » Fr 11. Dez 2015, 13:23

Von Oldperl schon am Rande erwähnt: ein Plugin.
In der Backend-Plugin-Oberfläche kann man dann die Konstanten anlegen und verwalten, per Chain werden bei der Ausgabe der Seite diese durch ihre Werte ersetzt.
So kann man diese Konstanten überall nutzen: Editor, Modul, Template, Modul-Template, ...

Gruß
Zuschauer

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von rethus » Fr 11. Dez 2015, 16:33

@Zuschauer: Deine Lösung mit der Chain hört sich ab solidesten an :wink:
Hast du so etwas schon mal gemacht und analysiert, wie es sich auf die Geschwindigkeit und Ressourcenverbrauch von Contenido auswirkt? Weil dann müsste ja die Chain bei jeder Page abgearbeitet werden?!

@McHubi:
Keine Ahnung, war einfach mal so ins Blaue überlegt wie du es ggf. angehen könntest. Vielleicht bietet TinyMCE ja so ne Art Placeholder-Plugin. Im Endeffekt wird es aber wahrscheinlich - sollte es so ein Plugin geben - darauf hinaus laufen, das du es wie von Zuschauer beschrieben, realisieren musst. Also die ganze Seite vor Auslieferung nochmal parsen. Kann mir vorstellen, das dies Contenido - und 4.9 hat eh den ruf langsam zu sein - noch langsamer macht.

Ich persönlich sehe auch keine praktischen Anwendungsfälle dafür. Hab ich z.B. einen Footer, wo Adressdaten drin stehen, mache ich ein neues Modul, das nur dieses Statische HTML ausgibt.
Habe ich eine Produktliste, die ich erzeuge, kann ich diese ja von der Picke auf selbst programmieren und bestücken, und somit beliebige Werte hinterlegen (z.B. auch durch zuvor erwähnte Mandanten-Variablen).
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von Zuschauer » Fr 11. Dez 2015, 17:49

Auf die Geschwindigkeit wird das keinen allzu großen Einfluss haben, natürlich abhängig davon, wieviele Konstanten gesucht werden müssen.
Je Konstante wird dann im einfachsten Fall ein str_replace() im Code durchgeführt.
Das ist genau das, was auch der Modul-Template Parser (schon ohne Smarty) macht, nur nicht über den fertigen Seitencode, sondern über einen Ausschnitt dessen, dafür aber mit wesentlich mehr Variablen.

Gruß
Zuschauer

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Verwendung von Konstanten

Beitrag von McHubi » Fr 11. Dez 2015, 20:04

@rethus :
Website für eine Körperschaft des öffentlichen Rechts, bei der in diversen Webartikeln Rechengrößen angegeben werden, die sich in regelmäßigen Abständen ändern.
Zentral auf einem Merkblatt oder einem Webartikel sind dutzende Rechengrößen, Entgeltgrenzen, Beitragssätze, Rufnummern usw. vermerkt. Diese Werte finden sich in unterschiedlichsten Webartikeln mehrfach wieder und ändern sich spätestens bei jedem Jahreswechsel. Hier mit Konstanten zu arbeiten erleichtert die Aktualisierung enorm. :wink:

Werde mir mal die chaingeschichte näher anschauen...
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Antworten