Ergebnis 1 bis 8 von 8

Thema: Seite duplizieren in eigenes Erweiterung

  1. #1
    Contao-Nutzer
    Registriert seit
    08.03.2011.
    Beiträge
    26

    Standard Seite duplizieren in eigenes Erweiterung

    Ich woll gerne eine Seite brauchen um neue Seiten zu machen (e.g. Vorlage). Aber ist es möglich um eine Seite zu kopieren? Ich habe nichts gefunden in der Dokumentation.

  2. #2
    Contao-Nutzer Avatar von Kayzu
    Registriert seit
    26.11.2009.
    Beiträge
    145

    Standard

    Einfach auf das grüne Pluszeichen neben den Artikeln bzw. der Seitenstruktur klicken.

  3. #3
    Contao-Nutzer
    Registriert seit
    08.03.2011.
    Beiträge
    26

    Standard

    Ja klar, aber ich woll das ist meine eigenes Erweiterung asfuhren. Ich habe eine callback gemacht:

    Code:
    $GLOBALS['TL_DCA']['tl_user']['config']['onsubmit_callback'][] = array('WikiContentAccess', 'onBackendUserCreated');
    Code:
    /**
     * Invoked when a new user gets added
     */
    public function onBackendUserCreated(DataContainer $dc) {
        // check whether the user already owns a page, if not create the page
        // by duplicating the base or template page
        $userId = $dc->activeRecord->id;
        $pageRecord = $this->Database->prepare("SELECT * FROM tl_page WHERE cuser=? AND cgroup=3")
                                        ->execute($userId)->row();
                                        
        // check whether a page is already owned by the user, if not duplicate the base page
        if ( $pageRecord === FALSE ) {
            $this->createDuplicateOfPage( 10 );
        }        
    }
    
    public function createDuplicateOfPage($pageId) {
         // duplicate the page and its contents
         var_dump('createDuplicateOfPage', $pageId);
    }
    Aber habe ich keine Ahnung wie Contao Seite duplizier code kann Wiederverwenden.
    Geändert von sprog (09.03.2011 um 13:05 Uhr)

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das müsstest du wohl direkt auf DB-Ebene machen. Contao bietet keine API für solche Funktionen.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Du musst dich am Vorbild aus der DC_Table::copyChilds langhangeln, und alle ChildRecords duplizieren und mit den neuen pid Werten belegen
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  6. #6
    Contao-Nutzer
    Registriert seit
    08.03.2011.
    Beiträge
    26

    Standard

    Schade das Contao keine API hat

  7. #7
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Das wuerd ich so nicht sagen. Contao hat eine gute API. nur war es bisher nich notwendig, das Erweiterungen diese Aktionen durchfuehren.

    Du kannst deine Programmierqualitaeten gerne nutzen, und eine normale lib programmieren, damit man eben dies auch durchfuehren kann.
    An sich ja auch nicht schwer, wie ich zwei Beitrage hoeher schon geschrieben habe.

    Also API ist wirklich da....
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  8. #8
    Contao-Nutzer
    Registriert seit
    08.03.2011.
    Beiträge
    26

    Standard

    Guten morgen! Ich habe eine Klasse gemacht:

    PHP-Code:
    /**
     * Duplicates the page with the given id
     * 
     * @param pageId    the page id of the page to be duplicated
     * @param title     the title of the new page
     * @param owner     the owner of the new page
     *
     * @returns int, identifier of the new page
     */
    public function duplicatePage($pageId$title$owner
    {
        
    $pagesRecordset $this->Database->prepare('SELECT * FROM tl_page WHERE id=?')->execute$pageId );
        if ( !
    $pagesRecordset->numRows 
        {
            return 
    false;
        }
        
        
    // retrieve the data of the page to be cloned
        
    $page $pagesRecordset->fetchAssoc();
        unset( 
    $page['id'] );    // remove the unique identifier of the page
        
    $page['cuser']  = $owner;
        
    $page['tstamp'] = time();
        
    $page['title']  = $title;
        
    $page['pageTitle'] = $title;
        
    $page['alias'] = $this->getAliasByPageTitle$title );

        
    // create the page record
        
    $newPageId $this->Database->prepare("INSERT INTO tl_page %s")->set($page)->execute()->insertId;
        
        
    // retrieve the articles associated with the page
        
    $articles $this->Database->prepare('SELECT * FROM tl_article WHERE pid=?')->execute$pageId )->fetchAllAssoc();
        foreach ( 
    $articles  as $articleIndex => $article 
        {
            
    // update the article definitions so that the article is owned by the user and the parent id is the new page
            
    $article['pid'] = $newPageId;
            
    $article['author'] = $owner;
            
    $article['alias'] = $this->getAliasByPageTitle$title );
            
    $article['published'] = '1'// always published
            
    $articles[$articleIndex] = $article;
        }
       
       
    // create all the articles for the page
       
    foreach ( $articles as $articleIndex => $article 
       {
            
    $articleId $article['id'];
            unset( 
    $article['id'] );
            
    $newArticleId $this->Database->prepare("INSERT INTO tl_article %s")->set($article)->execute()->insertId;
            
    $elementIds $this->duplicateContentElements$articleId$newArticleId );
       }
        
        return 
    $newPageId;
    }

    /**
      * Duplicates all the content elements of the given article 
      * and associate with the newly created article.
      *
      * @param oldArticle   the old article to use for duplication
      * @param newArticle   the new article to use for the duplicated elements
      */
    public function duplicateContentElements($oldArticle$newArticle)
    {
        
    $result = array();

        
    $contentElements $this->Database->prepare('SELECT * FROM tl_content WHERE pid=?')->execute$oldArticle )->fetchAllAssoc();
        foreach ( 
    $contentElements as $elementIndex => $contentElement )
        {
            
    $elementId $contentElement['id'];
            unset( 
    $contentElement['id'] );
            
            
    $contentElement['pid'] = $newArticle;
            
    $newElementId $this->Database->prepare("INSERT INTO tl_content %s")->set($contentElement)->execute()->insertId;
            
    $result[] = $newElementId;
        }  

        return 
    $result;
    }

    public function 
    getAliasByPageTitle($title
    {
        return 
    $title;


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Eigenes Login-Template für englischsprachige Seite
    Von Raynaldo im Forum Layout / Templates / Holy Grail
    Antworten: 2
    Letzter Beitrag: 23.02.2011, 19:43
  2. Pro Seite ein eigenes Bild
    Von mctimotheus im Forum Layout / Templates / Holy Grail
    Antworten: 1
    Letzter Beitrag: 08.10.2010, 07:46
  3. Nach System duplizieren, weisse Seite im Frontend
    Von freaky im Forum Installation / Update
    Antworten: 3
    Letzter Beitrag: 25.09.2010, 12:27
  4. Seite duplizieren ohne Artikel?
    Von Russe im Forum Sonstiges zu Contao
    Antworten: 4
    Letzter Beitrag: 19.03.2010, 21:37
  5. Erweiterung (lightbox4ward) für eine Seite deaktivieren
    Von ephiance im Forum Sonstige Erweiterungen
    Antworten: 3
    Letzter Beitrag: 26.11.2009, 14:11

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •