Skip to content

Commit

Permalink
Task: New features & enhancements
Browse files Browse the repository at this point in the history
- Upload select (drop-down) with example.
- Example for multiple select (drop-down).
- Additional parameter (options) for selects (drop-downs).
- Retrieve selected ids of selected categories, articles, content types, and upload files.
- Unified string identifier, replaced `cat_<id>` with `idcat:<id>`, and `art_<id>` with `idcatart:<id>`.
  • Loading branch information
muratpurc committed Mar 21, 2023
1 parent d179a20 commit f2a7250
Show file tree
Hide file tree
Showing 14 changed files with 1,173 additions and 160 deletions.
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ Provides the module/plugin developer with tools and makes the work on module/plu
- Easy access to the most common client information and paths.
- Easy access to the most common backend information and paths.
- Generic properties for modules and plugins.
- Form elements for selecting categories, articles and content types.
- Form elements for selecting categories, articles, content types, and upload files.
- Easy access to ids of selected categories, articles, content types, and upload files.
- Fully compatible with CONTENIDO >= 4.10.*.
- Fully compatible with PHP >= 7.0, also with PHP up to 8.2.
- In summary, an easier way to program modules and plugins for CONTENIDO CMS.

## Usage

1. Download release archive (zip)
Expand All @@ -33,6 +35,15 @@ Provides the module/plugin developer with tools and makes the work on module/plu

3. Use it in your modules or plugins

## Settings

Settings used by the plugin, which can be defined on user, group, client or system level.

|Type|Name|Description| Default |
|----|----|-----------|-------------------------------------|
|plugin_mp_dev_tools|select_option_folder_symbol|The symbol to represent a folder for the upload select (drop-down). This can be any character, unicode character, or HTML entity, but not HTML markup. | "\&#128193;" HTML entity for folder |


## Module example

See also "_examples" folder in GitHub for a sample implementation of a module based on "Mp Dev Tools" features.
Expand Down
50 changes: 26 additions & 24 deletions _examples/mp_dev_tools_example_module/lang/lang_de_DE.txt
Original file line number Diff line number Diff line change
@@ -1,39 +1,41 @@
CLIENT_PATH_INFO=Pfadinformationen eines Mandanten.
COMMON_CLIENT_INFO=Allgemeine Mandanteninformationen
LBL_ARTICLE_SELECT=Artikel Selectbox
LBL_CATEGORY_SELECT=Kategorie Selectbox
LBL_CHECKBOX=Checkbox
LBL_CHECKBOX_ROW=Checkbox Beispiel
LBL_SELECT_ROW=Selectbox Beispiel
LBL_CONTENT_TYPE_SELECT=Content Typ Selectbox
LBL_FORMAT_IS=Das Format ist
LBL_MODULE_CLASS_EXAMPLE=Eine einfache Beispiel-Implementation für eine Modul-Klasse:
LBL_MULTIPLE_CATEGORY_SELECT=Kategorie Selectbox mit Mehrfachauswahl
LBL_OR=oder
LBL_RADIO_1=Radio 1
LBL_RADIO_2=Radio 2
LBL_RADIO_3=Radio 3
LBL_RADIO_ROW=Radio Beispiel
LBL_RESULT=Ergebnis:
LBL_SELECT_ROW=Selectbox Beispiel
LBL_TEXTAREA_ROW=Textarea Beispiel
LBL_TEXTBOX_ROW=Textbox Beispiel
LBL_UPLOAD_SELECT=Upload Selectbox
LBL_VALUE_LIST=wert1,wert2,wert3
LBL_VALUES=Werte
LEGEND_CLIENT_INFO=Mandanteninformationen
LEGEND_MODULE=Modul Klasse
LEGEND_MODULE_METHODS=Modulfunktionen
LEGEND_MODULE_PROPERTIES=Moduleigenschaften
OPTION_PLEASE_CHOOSE=--Bitte wählen--
SAVE_CHANGES=Änderungen speichern
LEGEND_MODULE_TOKEN_INFO=Modul-Token (CmsToken)
LEGEND_MORE_SELECTS=Mehr Selectboxen
LBL_CATEGORY_SELECT=Kategorie Selectbox
LBL_ARTICLE_SELECT=Artikel Selectbox
LBL_CONTENT_TYPE_SELECT=Content Typ Selectbox
LBL_FORMAT_IS=Das Format ist
LBL_MULTIPLE_SELECT=Selectbox mit Mehrfachauswahl
LBL_OR=oder
LBL_VALUE_LIST=wert1,wert2,wert3
LEGEND_CLIENT_INFO=Mandanteninformationen
COMMON_CLIENT_INFO=Allgemeine Mandanteninformationen
CLIENT_PATH_INFO=Pfadinformationen eines Mandanten.
MSG_CLIENT_PATHS=Pfad- und URL-Funktionen können optional mit einem Dateinamen oder Unterordnernamen aufgerufen werden und liefern den vollen Pfad oder die volle URL zurück.
LBL_RESULT=Ergebnis:
LEGEND_REQUEST_INFO=Request Informationen
MSG_CLIENT_INFO=Das Mandanten Informations-Objekt dient als Schnittstelle für den lesenden Zugriff auf die Mandanten-Konfiguration $cfgClient. Über die Methoden hat man unter anderem auch sehr einfach Zugriff auf die Pfade und URL's (cache, css, data, images, js, usw.) des Mandanten.
MSG_REQUEST_INFO=Das Request-Objekt bietet eine einfache Möglichkeit, um auf $_GET, $_POST, $_REQUEST, $_COOKIE Variablen zuzugreifen und stellt Methoden zur Verfügung um Ankommen der HTTP Anfragen auf die Methoden HEAD, GET, POST, PUT, PATCH, DELETE und OPTIONS hin zu prüfen.
LEGEND_MODULE_TOKEN_INFO=Modul-Token (CmsToken)
MSG_MODULE_TOKEN=Mit dem Modul-Token hat man eine einfache Schnittstelle zu CMS Token CMS_VAR[123] und CMS_VALUE[123]. Eine CmsToken-Instanz lässt sich nur mit dem Index (z. B. 123) des CMS Tokens erstellen, danach hat man über die Methoden Zugriff auf die Variable (CMS_VAR[123]) und den Wert (CMS_VALUE[123]).
MSG_MULTIPLE_SELECT=Werte von Selectboxen mit Mehrfachauswahl werden in Form eines Komma separierten Textes gespeichert, z. B. <code>"wert,wert2,wert3"</code>.
LEGEND_MODULE=Modul Klasse
MSG_CLIENT_PATHS=Pfad- und URL-Funktionen können optional mit einem Dateinamen oder Unterordnernamen aufgerufen werden und liefern den vollen Pfad oder die volle URL zurück.
MSG_MODULE=Mit der Implementierung einer Modul-Klasse hat man die Möglichkeit, von diverses Features zu profitieren, wie z. B. Zugriff auf gängige globale Variablen (z. B. Mandanten-ID, Sprach-ID, Artikel-ID, Kategorie-ID), manche Backendinformationen, Modulinformationen, Modulpfade, generische Eigenschaften, Schnittstelle für Modul-Settings, usw. Es ist nicht zwingend notwendig, für ein Modul eine Modul-Klasse zu programmieren, man kann viele Features des Mp Dev Tools Plugins auch direkt nutzen oder in seine eigene Anwendungslogik integrieren.
LBL_MODULE_CLASS_EXAMPLE=Eine einfache Beispiel-Implementation für eine Modul-Klasse:
MSG_MODULE_2=Verwenden kann man die Modul-Klasse in der Modul-Eingabe und/oder in der Modul-Ausgabe. Einfach eine Instanz erstellen, dabei die gewünschten Parameter übergeben (Wichtig: Die Parameter müssen in der Modul-Klasse unter $properties definiert sein) und das Modul-Objekt im Modulcode einsetzen.
MSG_MODULE_3=Im Folgenden sieht man die Struktur der Modul-Klasse "MpDevToolsExampleModule". Die Auflistung ist rudimentär und stellt die öffentlichen Eigenschaften und Methoden der Klasse dar.
MSG_MODULE_TOKEN=Mit dem Modul-Token hat man eine einfache Schnittstelle zu CMS Token CMS_VAR[123] und CMS_VALUE[123]. Eine CmsToken-Instanz lässt sich nur mit dem Index (z. B. 123) des CMS Tokens erstellen, danach hat man über die Methoden Zugriff auf die Variable (CMS_VAR[123]) und den Wert (CMS_VALUE[123]).
MSG_MULTIPLE_SELECT=Werte von Selectboxen mit Mehrfachauswahl werden in Form eines Komma separierten Textes gespeichert, z. B. <code>"wert,wert2,wert3"</code>.
MSG_REQUEST_INFO=Das Request-Objekt bietet eine einfache Möglichkeit, um auf $_GET, $_POST, $_REQUEST, $_COOKIE Variablen zuzugreifen und stellt Methoden zur Verfügung um Ankommen der HTTP Anfragen auf die Methoden HEAD, GET, POST, PUT, PATCH, DELETE und OPTIONS hin zu prüfen.
MSG_TABLE_EXAMPLE=Ein Beispiel für eine Tabelle mit diversen Formularelementen (Checkbox, Selectbox, Radio Buttons und Speichern Button). Die hier konfigurierten Werte und die in der klappbaren Tabelle (FieldsetTable) unten (siehe "Mehr Selectboxen") werden in der Modulausgabe angezeigt.
LBL_TEXTBOX_ROW=Textbox
LBL_TEXTAREA_ROW=Textarea
MSG_TEXTAREA_INFO=Das ist ein Beispiel für ein Tooltip.<br><p>Mit Tooltips kann man den Benutzern mehr Informationen zur Verfügung stellen,<br>die bei Bedarf über einen Klick angezeigt werden können.<br><br><strong>HTML-Markup</strong> in <span>Tooltips</span> sind auch möglich.</p>
MSG_MODULE_3=Im Folgenden sieht man die Struktur der Modul-Klasse "MpDevToolsExampleModule". Die Auflistung ist rudimentär und stellt die öffentlichen Eigenschaften und Methoden der Klasse dar.
OPTION_PLEASE_CHOOSE=--Bitte wählen--
SAVE_CHANGES=Änderungen speichern
50 changes: 26 additions & 24 deletions _examples/mp_dev_tools_example_module/lang/lang_en_US.txt
Original file line number Diff line number Diff line change
@@ -1,39 +1,41 @@
CLIENT_PATH_INFO=Path information of a client.
COMMON_CLIENT_INFO=Common client information
LBL_ARTICLE_SELECT=Article select box
LBL_CATEGORY_SELECT=Category select box
LBL_CHECKBOX=Checkbox
LBL_CHECKBOX_ROW=Checkbox example
LBL_SELECT_ROW=Select box example
LBL_CONTENT_TYPE_SELECT=Content Type select box
LBL_FORMAT_IS=The format is
LBL_MODULE_CLASS_EXAMPLE=A simple example implementation for a module class:
LBL_MULTIPLE_CATEGORY_SELECT=Category select box with multiple selection
LBL_OR=or
LBL_RADIO_1=Radio 1
LBL_RADIO_2=Radio 2
LBL_RADIO_3=Radio 3
LBL_RADIO_ROW=Radio example
LBL_RESULT=Result:
LBL_SELECT_ROW=Select box example
LBL_TEXTAREA_ROW=Textarea example
LBL_TEXTBOX_ROW=Text box example
LBL_UPLOAD_SELECT=Upload select box
LBL_VALUE_LIST=value1,value2,value3
LBL_VALUES=Values
LEGEND_CLIENT_INFO=Client information
LEGEND_MODULE=Module class
LEGEND_MODULE_METHODS=Module functions
LEGEND_MODULE_PROPERTIES=Module properties
OPTION_PLEASE_CHOOSE=--Please choose--
SAVE_CHANGES=Save changes
LEGEND_MODULE_TOKEN_INFO=Module token (CmsToken)
LEGEND_MORE_SELECTS=More select boxes
LBL_CATEGORY_SELECT=Category select box
LBL_ARTICLE_SELECT=Article select box
LBL_CONTENT_TYPE_SELECT=Content Type select box
LBL_FORMAT_IS=The format is
LBL_MULTIPLE_SELECT=Select box with multiple selection
LBL_OR=or
LBL_VALUE_LIST=value1,value2,value3
LEGEND_CLIENT_INFO=Client information
COMMON_CLIENT_INFO=Common client information
CLIENT_PATH_INFO=Path information of a client.
MSG_CLIENT_PATHS=Path- and URL-functions can optionally be called with a filename or subfolder name, they return then the full path or URL.
LBL_RESULT=Result:
LEGEND_REQUEST_INFO=Request information
MSG_CLIENT_INFO=The client information object serves as an interface with reading access to the client configuration $cfgClient. Its methods also give you very easy access to the paths and URLs (cache, css, data, images, js, etc.) of the client.
MSG_REQUEST_INFO=The Request object provides an easy way to access $_GET, $_POST, $_REQUEST, $_COOKIE variables and provides methods to check for the HTTP request methods HEAD, GET, POST, PUT, PATCH, DELETE and OPTIONS.
LEGEND_MODULE_TOKEN_INFO=Module token (CmsToken)
MSG_MODULE_TOKEN=With the module token you have a simple interface to the CMS tokens CMS_VAR[123] and CMS_VALUE[123]. A CmsToken instance can only be created with the index (e.g. 123) of the CMS token, after that you have access to the variable (CMS_VAR[123]) and the value (CMS_VALUE[123]) via the provided methods.
MSG_MULTIPLE_SELECT=Values of select boxes with multiple selections are stored in the form of comma-separated text, e.g. <code>"wert,wert2,wert3"</code>.
LEGEND_MODULE=Module class
MSG_CLIENT_PATHS=Path- and URL-functions can optionally be called with a filename or subfolder name, they return then the full path or URL.
MSG_MODULE=With the implementation of a module class you have the possibility to benefit from various features, e.g. access to common global variables (e.g. client ID, language ID, article ID, category ID), some backend information, module information, module paths, generic properties, interface for module settings, etc. It is not necessary to program a module class for a module, you can also use many features of the Mp Dev Tools plugin directly or integrate it into your own application logic.
LBL_MODULE_CLASS_EXAMPLE=A simple example implementation for a module class:
MSG_MODULE_2=You can use the module class in the module input and/or in the module output. Simply create an instance, pass the desired parameters (Important: The parameters must be defined in the module class under $properties) and use the module object in the module code.
MSG_MODULE_3=The structure of the module class "MpDevToolsExampleModule" is shown below. The listing is rudimentary and represents the public properties and methods of the class.
MSG_MODULE_TOKEN=With the module token you have a simple interface to the CMS tokens CMS_VAR[123] and CMS_VALUE[123]. A CmsToken instance can only be created with the index (e.g. 123) of the CMS token, after that you have access to the variable (CMS_VAR[123]) and the value (CMS_VALUE[123]) via the provided methods.
MSG_MULTIPLE_SELECT=Values of select boxes with multiple selections are stored in the form of comma-separated text, e.g. <code>"wert,wert2,wert3"</code>.
MSG_REQUEST_INFO=The Request object provides an easy way to access $_GET, $_POST, $_REQUEST, $_COOKIE variables and provides methods to check for the HTTP request methods HEAD, GET, POST, PUT, PATCH, DELETE and OPTIONS.
MSG_TABLE_EXAMPLE=An example of a table with various form elements (checkbox, select box, radio buttons and save button). The values configured here and those in the collapsible table (FieldsetTable) below (see "More select boxes") are displayed in the module output.
LBL_TEXTBOX_ROW=Textbox
LBL_TEXTAREA_ROW=Textarea
MSG_TEXTAREA_INFO=This is an example of a tooltip.<br><p>Tooltips are a way to provide users with more information<br>which can be viewed with one click when needed.<br><br><strong>HTML Markup</strong> in <span>Tooltips</span> is also possible.</p>
MSG_MODULE_3=The structure of the module class "MpDevToolsExampleModule" is shown below. The listing is rudimentary and represents the public properties and methods of the class.
OPTION_PLEASE_CHOOSE=--Please choose--
SAVE_CHANGES=Save changes
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
'debug' => false,
'db' => cRegistry::getDb(),
'i18n' => [
'LBL_RESULT' => mi18n('LBL_RESULT')
'LBL_RESULT' => mi18n("LBL_RESULT")
],
'myCustomProperty' => 'Value of my custom property',
]);
Expand Down Expand Up @@ -120,14 +120,13 @@
]);

// Row article select
$selectedCategoryId = cSecurity::toInteger(str_replace('cat_', '', $cmsCategoryToken->value));
$cmsArticleToken = $module->getCmsToken(11);
$articleSelect = $module->getGuiArticleSelect(
$cmsArticleToken->var, $module->clientId, $module->languageId
);
$fieldsetTable->addFullSeparatorRow([
mi18n("LBL_ARTICLE_SELECT"),
$articleSelect->render($selectedCategoryId, $cmsArticleToken->value)
$articleSelect->render($cmsCategoryToken->value, $cmsArticleToken->value)
]);

// Row content type select
Expand All @@ -138,7 +137,7 @@
$contentTypes = $module->getContentTypeIds();
$contentTypes = implode(',', $contentTypes);
$contentTypeSelect = $contentTypeSelect->render(
$cmsArticleToken->value, $cmsContentTypeToken->value, $contentTypes
$cmsArticleToken->value, $cmsContentTypeToken->value, ['typeRange' => $contentTypes]
);
$fieldsetTable->addFullSeparatorRow([
mi18n("LBL_CONTENT_TYPE_SELECT"), $contentTypeSelect
Expand All @@ -152,10 +151,20 @@
['multiple' => 'multiple', 'size' => 5]
);
$fieldsetTable->addRow([
mi18n("LBL_MULTIPLE_SELECT"),
mi18n("LBL_MULTIPLE_CATEGORY_SELECT"),
$categorySelect->render($cmsToken->value) . $infoButton->render()]
);

// Row upload select
$cmsUploadToken = $module->getCmsToken(14);
$uploadSelect = $module->getGuiUploadSelect(
$cmsUploadToken->var, $module->clientId, $module->languageId
);
$fieldsetTable->addFullSeparatorRow([
mi18n("LBL_UPLOAD_SELECT"),
$uploadSelect->render('', $cmsUploadToken->value)
]);

// Row submit button
$fieldsetTable->addSubmitRow(['', mi18n("SAVE_CHANGES")]);

Expand Down Expand Up @@ -185,7 +194,7 @@
'debug' => false,
'db' => cRegistry::getDb(),
'i18n' => [
'LBL_RESULT' => mi18n('LBL_RESULT')
'LBL_RESULT' => mi18n(\"LBL_RESULT\")
],
'myCustomProperty' => 'Value of my custom property',
]);
Expand Down Expand Up @@ -313,11 +322,13 @@
$module->addCodeRow($fieldsetTable, '$cmsToken = $module->getCmsToken(2)', $cmsToken);

$module->addCodeRow($fieldsetTable, '$cmsToken->index', $cmsToken->index);
$module->addCodeRow($fieldsetTable, '$cmsToken->getIndex()', $cmsToken->getIndex());

$module->addCodeRow($fieldsetTable, '$cmsToken->var', $cmsToken->var);
$module->addCodeRow($fieldsetTable, '$cmsToken->getVar()', $cmsToken->getVar());

$module->addCodeRow($fieldsetTable, '$cmsToken->value', $cmsToken->value);

$module->addCodeRow($fieldsetTable, '$cmsToken->value', $cmsToken->value);

// Render fieldset table
echo $fieldsetTable->render();
Expand Down
Loading

0 comments on commit f2a7250

Please sign in to comment.