80 Nachrichten unter 29 Themen von 35 Mitgliedern
[SilverStripe Roadmap][Changelog]

Klasse, die von Page erbt, um ein Bild erweitern

Seite: 1 , 2 1953 mal gelesen
  • Conan
    Community Member
    37 Beiträge

    Klasse, die von Page erbt, um ein Bild erweitern

    Hi,
    ich will einer Klasse, die von Page erbt ein Bild zuweisen (also jeder Instanz ein eigenes natürlich).
    Das soll nicht über den WYGIWYS-Editor reingefummelt werden, sondern über ein eigenes Feld.

    Wenn ich ein DataObject habe, kann ich das sehr leicht realisieren.
    Hier muss ich, um im ein Bild zuzuweisen, lediglich die Variable $db anpassen.
    wenn ich das bei einer Klasse, die von Page erbt versuche, also mit

    $db = array ( 'MeinBild' => 'Image');

    ,dann krachts gewaltig.
    Ich habe versucht eine has_one-Relation anzulegen,
    aber ich kriege das Bild nicht eindeutig zur Klasse referenziert.
    Ich weiß nicht wie ich hier weiter machen soll und wie ich das im Backend anzeige.
    Kann mir hier jemand helfen?

    Wie kann ich denn eine Klasse, die von Page erbt um ein Bild erweitern?
  • alexbeka
    Community Member
    11 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    Hi Conan (lustiger Nickname :-)),

    ich habe ähnliches auch schon benötigt für einen eigenen Seitentyp wo auch ein Banner angezeigt wird;
    folgender Code sollte für dich hilfreich sein:

    <?php
    class PageWithBanner extends Page {
       static $has_one = array(
       'Bannerbild' => 'Image'
       );
       static $singular_name = 'Seite mit Banner';
       static $plural_name = 'Seiten mit Banner';

       function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->addFieldToTab("Root.Content.Banner", new ImageField('Bannerbild'));
        return $fields;
       }
    }

    class PageWithBanner_Controller extends Page_Controller {
    }
    ?>


    im Template kann man das dann einfach z.b. so einbauen:

    <% if ClassName = PageWithBanner %>
    <div id="Banner">
       $Bannerbild.SetHeight(118)
    </div>
    <% end_if %>


    lg
    Alex
  • Lukin
    Lukin Community Member
    60 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    HI,

    wie sieht s denn aus, wenn man einen variable Anzahl an Bildern über die selbe Art und Weise einbinden will.
    Das müsste ja ansatzmäßig über has_many zu realisieren sein.

    folgendes bietet mir einen Upload des Bildes an,.. nachdem Upload wird allerdings kein Bild angezeigt....

    public static $has_many = array(
       'Photo' => 'Image'
       );
  • Izeroy
    Community Member
    211 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    Hi Lukin,
    ich würde in dem Fall mit DataObjects arbeiten, dürfte einfacher sein.

    Hier ein kleines Beispiel:
    Photo.php

    <?
    class Photo extends DataObject {
    static $db = array('Titel' => 'Varchar(255)',);
    static $has_one = array('Bild' => 'Image', 'Seite' => 'SiteTree');
    function getCMSFields_forPopup() {
             $fields = new FieldSet();
             $fields->push( new TextField( 'Titel', 'Titel' ) );
             $fields->push( new ImageField( 'Bild', 'Bild' ) );
             return $fields;
          }
    }

    ?>


    Und in der Page.php dann:

    ....
    static $has_many = array('Photos' => 'Photo');
    function getCMSFields() {
             $fields = parent::getCMSFields();
             $tablefield = new HasManyComplexTableField(
                $this,
                'Photos',
                'Photo',
                array(
                   'Titel' => 'Titel'
                ),
                'getCMSFields_forPopup'
             );
             $tablefield->setAddTitle( 'A Photo' );
       
             $fields->addFieldToTab( 'Root.Content.Bilder', $tablefield );
       
             return $fields;
          }

    ...



    Und dann der Aufruf in der Template Datei:


    ....
    <% control Photos %>
    $Bild
    <% end_control %>
    ...


    Genauere Erklärungen zu den einzelnen Bereichen kann ich auch gerne geben.

    Greetz
    Ben

    PS: Ist alles ohne Test geschrieben(wie eigentlich immer bei mir) für kleinere Fehler entschuldige ich mich.

    Weitere Fragen?! Meld dich einfach! MSN: benjamin.buessenschuett@hotmail.de ICQ: 354 848 193 Webseite: www.silverstripe-hilfe.de

  • Lukin
    Lukin Community Member
    60 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    HI Ben,

    cool, vielen Dank für den schnellen Support :)

    Ich hab es mal ausprobiert ein kleiner Feherl war drin, den ich korrigieren konnte

    und zwar brauchts in der Page.php im array für die Anzeige der Tabellenfelder '=>' anstatt ','


    $tablefield=new HasManyComplexTableField(
             $this,
             'Photos',
             'Photo',
             array(
                'Titel'=>'Titel',
                'Bild'=>'Photo'
             ),
             'getCMSFields_forPopup'
          );




    Nachdem ich das hatte konnte ich nun Bilder anlegen und er zeigt sie mir dann auch schön in der Tabelle an.

    Einem Fehler kommm ich nicht auf die Spur:

    Wenn ich mir eines meiner zuvor angelegnten Bilder anschaue ( Klick auf die Tabllenzeile ) und dann das Popup wieder schliesse gibt er mir einen Error aus

    Der Fehler triit immer auf wenn ich das Popup schliesse.... auch nach dem anlegen eines neuen Bildes. Neu Laden der Seite verschafft dann Abhilfe

    The action 'admin' does not exist in class CMSMain

    Lade ich die Seite über die Navigation neu ist alles OK......
  • Lukin
    Lukin Community Member
    60 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    zweimal geklickt....
  • Lukin
    Lukin Community Member
    60 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    Habe gerade bemerkt, dass die Bilder in jeder Seite mit dem Pagetyp Page angezeigt werden. Es liegt keine Bindung auf ein spezielles Dokument vor.....

    Inder Db in der Tabelle Photo wird SeiteID nicht gesetzt (0). Ich habe händisch mal eine ID eingetragen, um zu schauen, ob das die Bindung ist,... leider ohne Erfolg im BackEnd
    Im FrontEnd zeigt er die Bilder nun auf der gewünschten Seite an
  • smindel
    smindel Community Member
    4 Beiträge

    Re: Klasse, die von Page erbt, um ein Bild erweitern

    hi Lukin,

    wenn du beziehungen zwischen page und anderen klassen hesrtellen willst kann ich das DOM modul von UncleCheese empfehlen: http://www.silverstripe.org/dataobjectmanager-module/

    als bonus bekommst du damit noch ein sehr ergonomisches gui.

    viel glueck

    andy

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: saerdna