Article_Product erweitern! Ein neues Feld im Bereich Artikel->Bilder / Adminbereich

Hi Community,

ich bin neu bei Oxid. Ich möchte gerne ein neues Feld im Adminbereich (Artikel->Bilder) mit ein Modul hinzufügen. Als erstens was funktioniert:

Ich habe einiges in Datei /application/controllers/admin/article_products.php angepasst und auch hingekriegt das Bild hochzuladen und zu verwenden. Ich will es aber Updatesicher machen und daher mit einen Modul das hinkriegen.

Das Feld konnte ich mit Modul den Block erweitern:

Metadata.php:

 $aModule = array(
    'id' => 'ad_image',
    'title' => 'AD IMAGE UPLOAD',
    'files' => array(),
    'ad_image_upload' => 'ad_image/application/controllers/admin/ad_image_upload'
    ), 
    'blocks' => array(
    array('template' => 'article_pictures.tpl',             
    'block' =>'admin_article_pictures_custom',        
     'file' =>'/views/blocks/article_pictures.tpl'),
     ),
     'settings' => array(),
);

Mein block .tpl liegt in Verzeichnis modules/ad_image/block/article_pictures.tpl.

Das Bild wird auch hochgeladen, da die Funktionen direkt von original Article_Products.php Datei geerbt werden.

Wie kann ich denn Article_Products.php erweitern oder meine eigene controller welches in Modulordner liegt verwenden?

Das Bild kann ich zwar hochladen aber nicht löschen, da dafür keine Funktion gefunden wird.

Wie oben schon geschrieben, wenn ich die Funktionen direkt in Original Article_Product.php eintrage, dann kann das Bild auch gelöscht werden. (Nicht Updatesicher)

Vielen Dank…

LG

Du musst doch nur analog zu

Javascript:DeletePic('xxx');

einen eigenen Index für Dein Bild anlegen, dann die Methode aus Article_Pictures.php überladen:

public function deletePicture()
    {
        $myConfig = $this->getConfig();

        if ($myConfig->isDemoShop()) {
            // disabling uploading pictures if this is demo shop
            $oEx = oxNew("oxExceptionToDisplay");
            $oEx->setMessage('ARTICLE_PICTURES_UPLOADISDISABLED');
            oxRegistry::get("oxUtilsView")->addErrorToDisplay($oEx, false);

            return;
        }

        $sOxId = $this->getEditObjectId();
        $iIndex = oxRegistry::getConfig()->getRequestParameter("masterPicIndex");

        $oArticle = oxNew("oxarticle");
        $oArticle->load($sOxId);

        if ($iIndex == "ICO") {
            // deleting main icon
            $this->_deleteMainIcon($oArticle);
        } elseif ($iIndex == "TH") {
            // deleting thumbnail
            $this->_deleteThumbnail($oArticle);
        } elseif ($iIndex == "xxx") {
            // deleting thumbnail
            $this->_deletexxxxxxxxx($oArticle);
        }else {
            $iIndex = (int) $iIndex;
            if ($iIndex > 0) {
                // deleting master picture
                $this->_resetMasterPicture($oArticle, $iIndex, true);
            }
        }

        $oArticle->save();
    }

und

protected function _deletexxxxxxxxx($oArticle)
    {
        if ($oArticle->oxarticles__oxxxx->value) {

           //Löschen des Bilder noch einfügen

            //reseting field
            $oArticle->oxarticles__oxxxx = new oxField();
        }
    }

Die 2 Methoden in eine Datei article_pictures_ext.php und in metadata.php eintragen, fertig:

'extend' => array(
		'article_pictures' => 'ad_image/application/controllers/admin/article_pictures_ext'
	 ),

Guten Rutsch

Hi Foxido, ich habe es genauso gemacht gehabt, aber ohne erfolg. Ich bin mir sicher, dass ich an einer Stelle einen kleinen Fehler mache. Also mein PHP-Code sieht folgendermaßen aus:

class ad_image_upload_ext extends oxAdminDetails
{

/**
     * Loads article information - pictures, passes data to Smarty
     * engine, returns name of template file "article_pictures.tpl".
     *
     * @return string
     */
public function deletePicture()
    {
        $myConfig = $this->getConfig();

        if ($myConfig->isDemoShop()) {
            // disabling uploading pictures if this is demo shop
            $oEx = oxNew("oxExceptionToDisplay");
            $oEx->setMessage('ARTICLE_PICTURES_UPLOADISDISABLED');
            oxRegistry::get("oxUtilsView")->addErrorToDisplay($oEx, false);

            return;
        }

        $sOxId = $this->getEditObjectId();
        $iIndex = oxRegistry::getConfig()->getRequestParameter("masterPicIndex");

        $oArticle = oxNew("oxarticle");
        $oArticle->load($sOxId);

        if ($iIndex == "ICO") {
            // deleting main icon
            $this->_deleteMainIcon($oArticle);
        } elseif ($iIndex == "TH") {
            // deleting thumbnail
            $this->_deleteThumbnail($oArticle);
        } elseif ($iIndex == "FI") {
            // deleting thumbnail
            $this->_deleteFormimg($oArticle);
        }else {
            $iIndex = (int) $iIndex;
            if ($iIndex > 0) {
                // deleting master picture
                $this->_resetMasterPicture($oArticle, $iIndex, true);
            }
        }

        $oArticle->save();
    } 
    	
	    protected function _deleteFormimg($oArticle)
    {
        if ($oArticle->oxarticles__oxformimg->value) {

            if (!$oArticle->isDerived()) {
                $oPicHandler = oxRegistry::get("oxPictureHandler");
                $oPicHandler->deleteFormimg($oArticle);
            }

            //reseting field
            $oArticle->oxarticles__oxformimg = new oxField();
        }
    }
}

Mache ich hier im Bereich [B]class[/B] richtig?

Wenn ich den Button Löschen anklicke wird einfach die Seite neu geladen und passiert nichts. Das Bild ist immer noch da.

Vielen Dank!

[QUOTE=Uemit;184896]
Mache ich hier im Bereich [B]class[/B] richtig?
[/QUOTE]

Nein: Files werden mit der Extension benannt: ad_image_upload[B].php[/B] Was im folgenden fehlen würde,

'[B]files[/B]' => array(),
    'ad_image_upload' => 'ad_image/application/controllers/admin/ad_image_upload[B].php[/B]'
    ), 

was Du aber garnicht willst, sondern die Klasse article_pictures erweitern:

class ad_image_upload_ext extends [B]ad_image_upload_ext_parent
{[/B]
...
}

Das wird ohne die Endung gemacht:

'[B]extend[/B]' => array(
        'article_pictures' => 'ad_image/application/controllers/admin/ad_image_upload_ext'
     ),  

Perfekt! Jetzt verstehe ich den Sinn und Zweck von files und extends…

Vielen lieben Dank, foxido!