Seite 4 von 4

Re: Frage zu CMS_IMG

Verfasst: Di 6. Jun 2017, 16:27
von csmd
Hallo zusammen,

also erstmal lieben Dank für die rege Beteilung :-)

Ich denke, wir bekommen das bald gelöst.

So weit bin ich inzwischen:

Code: Alles auswählen

if (0 < strlen($imageSource)) {
    $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
    $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
    
	$clientID = cRegistry::getClientId();
	$uplfilename = basename($filename);
	$upldirname = dirname($filename);
	$upload = new cApiUpload();
	$upload->loadByMany(array(
		'filename' => $uplfilename,
		'dirname' => $upldirname,
		'idclient' => $clientID
	), false);
	$idupl = $upload->get('idupl');
	$uploadMeta = new cApiUploadMeta();
	$uploadMeta->loadByMany(array(
		'idupl' => $idupl,
		'idlang' => $lang
	));
	$medianame = $uploadMeta->get('medianame');
	
... usw
(bis auf diese Erweiterung geht es um das orig "content_image" Modul)
($imageSource = "CMS_IMG[1]";)

Leider bleibt die Variable $idupl leer, womit der Meta Kram dann auch nicht ausgelesen werden kann.
Mache ich beim Filename was falsch?
Wie müssen denn die beiden Pfade filename / dirname aussehen?

Viele Grüße, Christian

Re: Frage zu CMS_IMG

Verfasst: Di 6. Jun 2017, 16:32
von csmd
Also es wäre schon beknackt, wenn man diese Contenido-Funktion "getImageMeta" nicht einfacher nutzen kann, sondern ziemlich 1:1 im Modul nachbauen muss.

Falls es doch eine einfachere Art der Verwendung gäbe, schließe ich mich Faar an und appeliere dafür, die Dokumentation mit kleinen Beispielen zu versehen (wie bei PHP.net). Sonst blickt doch keiner mehr richtig durch...

Re: Frage zu CMS_IMG

Verfasst: Di 6. Jun 2017, 16:49
von Faar
Man könnte es aus Homtatas Version mit den Klassen so zusammenbauen:

Code: Alles auswählen

$article = new cApiArticleLanguage();
$article->loadByArticleAndLanguageId($cms_idart, $lang);
$idupl = $article->getContent('imgeditor', 1);

$imagemeta = new cApiUploadMeta();

...

Re: Frage zu CMS_IMG

Verfasst: Di 6. Jun 2017, 17:17
von Oldperl
Servus,

Erweiterung für das Modul content_image (einfach den Code ab dem Kommentar bis Modulende ersetzen):

Code: Alles auswählen

// build class containing all data necessary to display image
// therefor the image dimensions have to be determined
if (0 < strlen($imageSource)) {
    $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
    $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
    list($imageWidth, $imageHeight) = getimagesize($filename);
    $image = new stdClass();
    $image->src = $imageSource;
    $image->alt = $imageDescription;
    $image->width = $imageWidth;
    $image->height = $imageHeight;
    
    
    $aPathInfo = pathinfo(str_replace($clientConfig["upl"]["htmlpath"], '', $imageSource));
    $aMeta = array();
    $oUpl = new cApiUpload();
    $oUpl->loadByMany(array(
        'filename' => $aPathInfo['basename'],
        'dirname'  => $aPathInfo['dirname']."/",
        'idclient' => cRegistry::getClientId()
    ));
    if($oUpl->isLoaded()) {
        $oUplMeta = new cApiUploadMeta();
        $oUplMeta->loadByUploadIdAndLanguageId($oUpl->get('idupl'), cRegistry::getLanguageId());
        if($oUplMeta->isLoaded()) {
            $aMeta = $oUplMeta->toArray();
        }
    }
} else {
    $image = NULL;
}

// When in backend edit mode add a label so the author
// knows what to type in the shown field.
if (cRegistry::isBackendEditMode()) {
    $label = mi18n("LABEL_IMAGE");
} else {
    $label = NULL;
}

// use smarty template to output header text
$tpl = cSmartyFrontend::getInstance();
$tpl->assign('label', $label);
$tpl->assign('editor', $imageEditor);
$tpl->assign('image', $image);
$tpl->assign('meta', $aMeta);
$tpl->display('get.tpl');
Im Template kann man nun ein Array mit dem Namen "meta" nutzen, in dem folgende Infos vorhanden sind

Code: Alles auswählen

array(12) {
  ["id_uplmeta"]=>
  string(2) "xx"
  ["idupl"]=>
  string(2) "xx"
  ["idlang"]=>
  string(1) "x"
  ["medianame"]=>
  string(0) ""
  ["description"]=>
  string(0) ""
  ["keywords"]=>
  string(0) ""
  ["internal_notice"]=>
  string(0) ""
  ["author"]=>
  string(8) "sysadmin"
  ["created"]=>
  string(19) "2016-11-04 11:22:49"
  ["modified"]=>
  string(19) "2016-11-04 11:22:49"
  ["modifiedby"]=>
  string(0) ""
  ["copyright"]=>
  string(0) ""
}
Gruß aus Franken

Ortwin

PS: Weitere Infos gibt es nur per Premium-Abo (kostenpflichtig) :wink:

Re: Frage zu CMS_IMG

Verfasst: Di 6. Jun 2017, 17:46
von csmd
Oldperl hat geschrieben: Di 6. Jun 2017, 17:17 Servus,

Erweiterung für das Modul content_image (einfach den Code ab dem Kommentar bis Modulende ersetzen):
...
WOW Ortwin, sehr elegant gelöst :-)
Super, Danke!
Hast was gut ;-)

Da war meine Vermutung mit dem Pfad gar nicht so arg falsch ...
Ich Deppele hatte auch ganz den fehlenden Slash "/" übersehen.

Nachdem ich die kleinen Tweaks mit pathinfo und "/" angepasst hatte, kam auch direkt eine Ausgabe hier an.
Der Rest von dir ist natürlich die Deluxe-Version.

Das hier ist meine abgespeckte Fassung, wie ich sie einsetzen werde
(ich wollte die Variable Medianame im Modul selbst noch etwas weiter verwursteln, bevor ich sie in verschiedenen Fassungen ans Template schiebe)

Code: Alles auswählen

	$aPathInfo = pathinfo(str_replace($clientConfig["upl"]["htmlpath"], '', $imageSource));
	$upload = new cApiUpload();
	$upload->loadByMany(array(
		'filename' => $aPathInfo['basename'],
        'dirname'  => $aPathInfo['dirname']."/",
		'idclient' => cRegistry::getClientId()
	), false);
	$uploadMeta = new cApiUploadMeta();
	$uploadMeta->loadByMany(array(
		'idupl' => $upload->get('idupl'),
		'idlang' => cRegistry::getLanguageId()
	));
	$medianame = $uploadMeta->get('medianame');
Oldperl hat geschrieben: Di 6. Jun 2017, 17:17 Gruß aus Franken

Ortwin

PS: Weitere Infos gibt es nur per Premium-Abo (kostenpflichtig) :wink:
Was, wie, wo? Haben will! :D

Viele Grüße, Christian