Zum Inhalt springen

Imagemagic im Backend

Erstellt am 5. Juni 2007 · 23 Antworten · letzte Antwort am 4. Juli 2008 · Seite 1 von 2

Tags: Frage

NickD ·

hallo,

ich lasse mir momentan im frontend einiger module per imagemagic die bilder verkleinern. dazu habe ich im ts die max-höhe und breite bestimmt. nun möchte ich dies auch gern im backend nutzen. ist der vorgang identisch mit dem im fe oder müssen fürs be andere einstellungen durchgeführt werden?

lg, nick

steffenk ·

Du musst Dir ein cObj bauen, dann kannst Du die Methoden nutzen.

Georg hat Recht, das ist gemein ohne Hinweis, hier mal ein Beispiel:

function buildTSFE() {
        /* Declare */
        $temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');

        /* Begin */
        if (!is_object($GLOBALS['TT'])) {
            $GLOBALS['TT'] = new t3lib_timeTrack;
            $GLOBALS['TT']->start();
        }

        if (!is_object($GLOBALS['TSFE']) && $this->pid) {
            //*** Builds TSFE object
            $GLOBALS['TSFE'] = new
$temp_TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],$this->pid,0,0,0,0,0,0);

            //*** Builds sub objects
            $GLOBALS['TSFE']->tmpl =
t3lib_div::makeInstance('t3lib_tsparser_ext');
            $GLOBALS['TSFE']->sys_page =
t3lib_div::makeInstance('t3lib_pageSelect');

            //*** init template
            $GLOBALS['TSFE']->tmpl->tt_track = 0;// Do not log
time-performance information
            $GLOBALS['TSFE']->tmpl->init();

            $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($this->pid);

            //*** This generates the constants/config + hierarchy info for
the template.

$GLOBALS['TSFE']->tmpl->runThroughTemplates($rootLine,$template_uid);
            $GLOBALS['TSFE']->tmpl->generateConfig();
            $GLOBALS['TSFE']->tmpl->loaded=1;

            //*** Get config array and other init from pagegen
            $GLOBALS['TSFE']->getConfigArray();
            $GLOBALS['TSFE']->linkVars =
''.$GLOBALS['TSFE']->config['config']['linkVars'];

            if
($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'])
{
                foreach
(t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1)
as $temp_p)    {
                    $GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1;
                }
            }

            //*** Builds a cObj
            $GLOBALS['TSFE']->newCObj();
        }

    }
bobsomoto ·

Hallo Steffen! Es wäre echt super wenn du den Code vielleicht noch ein bisschen besser auskommentieren könntest, sodaß man ein wenig genauer nachvollziehen kann was genau du da machst und auch erläutern könntest wo und wie man die geschichte einbinden kann! Vielen Dank im Voraus

Gruss Boris

steffenk ·

ich denk, das die Kommentare eindeutig sind.
Der Code kommt 1:1 in ein BE-Modul, die Funktion wird aufgerufen und dann hat man $GLOBALS['TSFE'] und ein cObj zur Verfügung.

Das ganze hab nicht ich mir ausgedacht sondern ist Teil einer Diskussion aus der dev-Liste.

NickD ·

mal eine andere frage....wie muss ich die config php seitig machen? damit meine ich die werte für max-height und width! ich habe diese momentan ausschließlich im ts deklariert und möchte diese nun gern über php bestimmen.

//hier besorg ich mir die werte aus dem ts für bigPic, das möchte ich zukünftig per php realisieren!!!!
$conf=$this->conf['bigPic.'];
//hier lese ich das bild ein
$conf['file'] = 'uploads/tx_werkstattfinder_pics/'.$row["filename"];
//und ihr bekomme ich ein fertiges images + tag zurück
$pic          = $this->cObj->IMAGE($conf);
NickD ·

danke für die schnelle antwort!
habe ich dann nicht ein fehler gemacht? müsste es nicht anstatt:

$conf['file'] = 'uploads/tx_werkstattfinder_pics/'.$row["filename"];

so heißen:

$conf['file.'] = 'uploads/tx_werkstattfinder_pics/'.$row["filename"];

??? wenn ja, warum funktioniert es dann?

NickD ·

ich habe noch eine frage zu deiner funktion....ich habe sie aufgerufen und das image objekt erzeugt. leider kann ich es nicht aufrufen, da anscheinend das objekt nicht verfügbar ist.

aufruf:
$this->cObj->IMAGE($conf);

NickD ·

ok danke....nun bekomme ich ein weiteren fehler...die klasse t3lib_timeTrack ist nicht bekannt. muss ich noch eine php datei einbinden?
du machst dir nämlich ein objekt dieser klasse:

/* Begin */
              if (!is_object($GLOBALS['TT'])) {
                  $GLOBALS['TT'] = new t3lib_timeTrack;
                  $GLOBALS['TT']->start();
              }
steffenk ·

um es vorwegzunehmen - das cObj zu benutzen ist nicht trivial, da im BE die Pfade komplett anders sind.
Ich habe es bisher auch nur geschafft, das cObj zu erstellen, die IMAGE-Funktion scheint noch andere Pfade zu suchen, es ist also Pioniergeist gefragt.

Hier die funktionierende Version fürs BE-Modul:

#needed for TSFE
require_once(PATH_t3lib.'class.t3lib_timetrack.php');
require_once(PATH_t3lib.'class.t3lib_tsparser_ext.php');
require_once(PATH_t3lib.'class.t3lib_page.php');
require_once(PATH_t3lib.'class.t3lib_stdgraphic.php');

require_once($BACK_PATH.'sysext/cms/tslib/class.tslib_fe.php');
require_once($BACK_PATH.'sysext/cms/tslib/class.tslib_content.php');
require_once($BACK_PATH.'sysext/cms/tslib/class.tslib_gifbuilder.php');

function buildTSFE() {
                    /* Declare */
                    $temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');

                    /* Begin */
                    if (!is_object($GLOBALS['TT'])) {
                        $GLOBALS['TT'] = new t3lib_timeTrack;
                        $GLOBALS['TT']->start();
                    }

                    if (!is_object($GLOBALS['TSFE']) && $this->id) {
                        //*** Builds TSFE object
                        $GLOBALS['TSFE'] = new  $temp_TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],$this->id,0,0,0,0,0,0);

                        //*** Builds sub objects
                        $GLOBALS['TSFE']->tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
                        $GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');

                        //*** init template
                        $GLOBALS['TSFE']->tmpl->tt_track = 0;// Do not log time-performance information
                        $GLOBALS['TSFE']->tmpl->init();

                        $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($this->id);

                        //*** This generates the constants/config + hierarchy info for the template.

                        $GLOBALS['TSFE']->tmpl->runThroughTemplates($rootLine,$template_uid);
                        $GLOBALS['TSFE']->tmpl->generateConfig();
                        $GLOBALS['TSFE']->tmpl->loaded=1;

                        //*** Get config array and other init from pagegen
                        $GLOBALS['TSFE']->getConfigArray();
                        $GLOBALS['TSFE']->linkVars = ''.$GLOBALS['TSFE']->config['config']['linkVars'];

                        if($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP']) {
                            foreach (t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1) as $temp_p) {
                                $GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1;
                            }
                        }
                       
                        //*** Builds a cObj
                        $GLOBALS['TSFE']->newCObj();
                    }

                }
NickD ·

wenn ich ein var_dump auf $GLOBALS['TSFE'] mache, ist dieser null...

benutze nun die selbe funktion wie die, die du gepostet hast.
in einer anderen funktion rufe ich diese auf und mache danach ein var_dump auf $GLOBALS['TSFE']. ergebnis: null

NickD ·

die extension ist im be eingebunden und ich habe die seite angeklickt.

mein code:

function buildTSFE() 
        {
              /* Declare */
                    $temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');

                    /* Begin */
                    if (!is_object($GLOBALS['TT'])) {
                        $GLOBALS['TT'] = new t3lib_timeTrack;
                        $GLOBALS['TT']->start();
                    }

                    if (!is_object($GLOBALS['TSFE']) && $this->id) {
                        //*** Builds TSFE object
                        $GLOBALS['TSFE'] = new  $temp_TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],$this->id,0,0,0,0,0,0);

                        //*** Builds sub objects
                        $GLOBALS['TSFE']->tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
                        $GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');

                        //*** init template
                        $GLOBALS['TSFE']->tmpl->tt_track = 0;// Do not log time-performance information
                        $GLOBALS['TSFE']->tmpl->init();

                        $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($this->id);

                        //*** This generates the constants/config + hierarchy info for the template.

                        $GLOBALS['TSFE']->tmpl->runThroughTemplates($rootLine,$template_uid);
                        $GLOBALS['TSFE']->tmpl->generateConfig();
                        $GLOBALS['TSFE']->tmpl->loaded=1;

                        //*** Get config array and other init from pagegen
                        $GLOBALS['TSFE']->getConfigArray();
                        $GLOBALS['TSFE']->linkVars = ''.$GLOBALS['TSFE']->config['config']['linkVars'];

                        if($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP']) {
                            foreach (t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1) as $temp_p) {
                                $GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1;
                            }
                        }
                       
                        //*** Builds a cObj
                        $GLOBALS['TSFE']->newCObj();
                    }

        }

function meineFunktion()
{
  $this->buildTSFE();
  var_dump($GLOBALS['TSFE']);
}
steffenk ·

var_dump ? :o komplett falsche Methode, es handelt sich um ein Objekt.

t3lib_div::debug($GLOBALS['TSFE']);

NickD ·

mit var_dump würde ich dennoch etwas sehen....mit t3lib_div::debug($GLOBALS['TSFE']); bekomme ich ausschließlich ein "debug", also ohne inhalt.

steffenk ·

falsch, var_dump gibt NULL aus, debug das komplette Objekt.
Bei mir klappt das hervorragend, also musst Du an anderer Stelle was falsch machen.

steffenk ·

ich muss mich revidieren: var_dump gibt auch Objekte aus.
Die debug-Methode der t3lib_div-Klasse bietet aber eine besser lesbare Variante.

NickD ·

hallo nochmal,

du meintest, das ich die einstellungen für imagemagic per php folgend mache:

$conf['file.']['maxW']=200;

ich habe nun mal im frontend diese einstellungen gemacht:

$conf['file.']['maxW']=200;
$conf['file.']['maxH']=200;
$conf['file'] = $path.$pic;

$pic = $this->cObj->IMAGE($conf);

leider bleibt $pic leer!?