Ergebnis 1 bis 1 von 1

Thema: dca mit sorting-mode 5 - root-elemente werden von anderem modul angelegt und gelöscht

  1. #1
    Contao-Nutzer
    Registriert seit
    27.09.2010.
    Beiträge
    23

    Standard dca mit sorting-mode 5 - root-elemente werden von anderem modul angelegt und gelöscht

    Hallo,

    ich stehe vor dem folgendem Problem:

    ich habe in meinem Modul Kategorien:
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');

    /**
     * Contao Open Source CMS
     * Copyright (C) 2005-2010 Leo Feyer
     *
     * Formerly known as TYPOlight Open Source CMS.
     *
     * This program is free software: you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation, either
     * version 3 of the License, or (at your option) any later version.
     * 
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * Lesser General Public License for more details.
     * 
     * You should have received a copy of the GNU Lesser General Public
     * License along with this program. If not, please visit the Free
     * Software Foundation website at <http://www.gnu.org/licenses/>.
     *
     * PHP version 5
     * @copyright  Götz-Daniel Jantsch, 2010 
     * @author     Götz-Daniel Jantsch 
     * @package    mb 
     * @license    LGPL 
     * @filesource
     */


    /**
     * Table tl_mb_kategorie 
     */
    $GLOBALS['TL_DCA']['tl_mb_kategorie'] = array
    (

        
    // Config
        
    'config' => array
        (
            
    'dataContainer'               => 'Table',
            
    'ctable'              => array('tl_mb_dokument','tl_mb_zugriffsrecht'),
            
    'enableVersioning'            => true
        
    ),

        
    // List
        
    'list' => array
        (
            
    'sorting' => array
            (
                
    'mode'                    => 5,
                
    'fields'                  => array('kt_name','kt_parentid'),
                
    'flag'              => 1
            
    ),
            
    'label' => array
            (
                
    'fields'                  => array('kt_name'),
                
    'format'                  => '%s',
                
    'label_callback'    => array('tl_mb_kategorie''addIcon')
            ),
            
    'global_operations' => array
            (
                
    'all' => array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['MSC']['all'],
                    
    'href'                => 'act=select',
                    
    'class'               => 'header_edit_all',
                    
    'attributes'          => 'onclick="Backend.getScrollOffset();" accesskey="e"'
                
    )
            ),
            
    'operations' => array
            (
                
    'edit' => array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['edit'],
                    
    'href'                => 'act=edit',
                    
    'icon'                => 'edit.gif'
                
    ),
                
    'copy' => array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['copy'],
                    
    'href'                => 'act=copy',
                    
    'icon'                => 'copy.gif'
                
    ),
                
    'delete' => array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['delete'],
                    
    'href'                => 'act=delete',
                    
    'icon'                => 'delete.gif',
                    
    'attributes'          => 'onclick="if (!confirm(\'' $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\')) return false; Backend.getScrollOffset();"'
                
    ),
                
    'show' => array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['show'],
                    
    'href'                => 'act=show',
                    
    'icon'                => 'show.gif'
                
    )
            )
        ),

        
    // Palettes
        
    'palettes' => array
        (
            
    '__selector__'                => array(''),
            
    'default'                     => '{kategorie_legend},kt_name,kt_titel,kt_beschreibung,kt_parentid,kt_dateityp,kt_abgeschlossen'
        
    ),

        
    // Subpalettes
        
    'subpalettes' => array
        (
            
    ''                            => ''
        
    ),

        
    // Fields
        
    'fields' => array
        (
            
    'kt_name' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['kt_name'],
                
    'exclude'                 => true,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=>true'maxlength'=>64'tl_class'=>'w50')
            ),

            
    'kt_titel' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['kt_titel'],
                
    'exclude'                 => true,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=>false'maxlength'=>64)
            ),

            
    'kt_beschreibung' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['kt_beschreibung'],
                
    'exclude'                 => true,
                
    'inputType'               => 'textarea',
                
    'eval'                    => array('rte'=>'tinyMCE''tl_class'=>'clr')
            ),
        
            
    /*'kt_parentid' => array
            (
                'label'                   => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['kt_parentid'],
                'exclude'                 => true,
                'inputType'               => 'radio',
                'foreignKey'          => 'tl_mb_kategorie.kt_name',
                'eval'                    => array('multiple'=>false, 'blankOptionLabel'=>'-')
            ),*/
        
            
    'kt_dateityp' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['kt_dateityp'],
                
    'exclude'                 => true,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=>true'maxlength'=>64)
            ),
      
            
    'kt_abgeschlossen' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_mb_kategorie']['kt_abgeschlossen'],
                
    'exclude'                 => true,
                
    'inputType'               => 'checkbox'
            
    )

        )
    );

    class 
    tl_mb_kategorie extends Backend
    {

        
    /**
         * Import the back end user object
         */
        
    public function __construct()
        {
            
    parent::__construct();
            
    $this->import('BackendUser''User');
        }


        
    /**
         *  add an icon
         */
        
    public function addIcon($row,$label)
        {    
            
    $image 'system/modules/mb_dokman/folder.gif';
            return 
    $this->generateImage($image)." ".$label;
        }
    }
     
    ?>
    und ich habe tl_member_groups so erweiter, dass beim Anlegen einer neuen Gruppe auch eine root-Kategorie für diese und ein Ordner in tl_files anglegt werden:
    PHP-Code:
    // Callback der ausgeführt wird, wenn eine Gruppe gespeichert wird
    $GLOBALS['TL_DCA']['tl_member_group']['config']['onsubmit_callback'][] = array('MbDokMan''initMb');
    // Callback der ausgeführt wird, wenn eine Gruppe gelöscht wird
    $GLOBALS['TL_DCA']['tl_member_group']['config']['ondelete_callback'][] = array('MbDokMan''deInitMb');

    $GLOBALS['TL_DCA']['tl_member_group']['list']['label']['fields'] = array('name','mbdir');
    $GLOBALS['TL_DCA']['tl_member_group']['list']['label']['format'] = '%s <span style="color:#b3b3b3; padding-left:3px;">[MBDir: %s]</span>';
    $GLOBALS['TL_DCA']['tl_member_group']['list']['label']['label_callback'] = array('MbDokMan''generateLabel');

    $GLOBALS['TL_DCA']['tl_member_group']['list']['operations']['delete']['attributes'] = 'onclick="if (!confirm(\'' $GLOBALS['TL_LANG']['MSC']['mbDeleteConfirm'] . '\')) return false; Backend.getScrollOffset();"';
    // wenn mbmanage aktiviert wird, soll eine subpalette mit dem Verzeichnisnahmen geladen werden
    $GLOBALS['TL_DCA']['tl_member_group']['palettes']['__selector__'] = array('redirect','mbmanage');
    // mbmanage-checkbox muss in der default palette drin sein
    $GLOBALS['TL_DCA']['tl_member_group']['palettes']['default'] = str_replace
    (
        
    ',redirect',
        
    ',redirect;{mbmanage_legend},mbmanage',
        
    $GLOBALS['TL_DCA']['tl_member_group']['palettes']['default']
    );
    // subpalette für mbmanage bekannt machen
    $GLOBALS['TL_DCA']['tl_member_group']['subpalettes']['mbmanage'] = 'mbdir,mbkat'
    // mbmanage-feld bekannt machen und anzeigen lassen
    $GLOBALS['TL_DCA']['tl_member_group']['fields']['mbmanage'] = array
    (
        
    'label'    => &$GLOBALS['TL_LANG']['tl_member_group']['mbmanage'],
        
    'exclude'    => true,
        
    'inputType'    => 'checkbox',
        
    'eval'    => array('submitOnChange'=>true)
    );
    // mbdir-feld bekannt machen und anzeigen lassen
    $GLOBALS['TL_DCA']['tl_member_group']['fields']['mbdir'] = array
    (
        
    'label'    => &$GLOBALS['TL_LANG']['tl_member_group']['mbdir'],
        
    'exclude'    => true,
        
    'inputType'    => 'text',
        
    'eval'    => array('mandatory'=>true'unique'=>true'maxlength'=>64)
    );

    // mbkat-feld bekannt machen und anzeigen lassen
    $GLOBALS['TL_DCA']['tl_member_group']['fields']['mbkat'] = array
    (
        
    'label'    => &$GLOBALS['TL_LANG']['tl_member_group']['mbkat'],
        
    'exclude'    => true,
        
    'inputType'    => 'text',
        
    'eval'    => array('mandatory'=>true'unique'=>true'maxlength'=>64)
    );

    class 
    MbDokMan extends Backend {

        public function 
    __construct() 
        { 
            
    parent::__construct(); 
            
    $this->import('BackendUser''User'); 
        } 

        
    // Wenn eine Gruppe von mb_dokman verwaltet werden soll, dann müssen hier
        // alle vorebereitenden Maßnahmen erledigt werden:
        // => Verzeichnis anlegen
        
    public function initMb($dc
        {
        if (
    $dc->activeRecord->mbmanage == '1')
        {
            
    $dir trim($GLOBALS['TL_CONFIG']['mb_dokman_dir']);
            
    $objFiles Files::getInstance(); 
            
    $objFiles->mkdir($dir."/".$dc->activeRecord->mbdir);


            
    $kat $dc->activeRecord->mbkat;

            
    $set = array
            (
            
    'tstamp'    => time(),
            
    'kt_name'    => $kat,
            
    'kt_beschreibung'    => 'Dokumente von Kunde: '.$kat
            
    );

            
    $this->Database->prepare("INSERT INTO tl_mb_kategorie %s")
                    ->
    set($set)
                    ->
    execute();
        }
        }

        
    // Wenn ein Gruppe gelöscht wird die von mb_dokman verwaltet wird, dann
        // mus aufgeräumt werden
        
    public function deInitMb($dc)
        {
        if (
    $dc->activeRecord->mbmanage == '1')
        {
            
    $dir trim($GLOBALS['TL_CONFIG']['mb_dokman_dir']);
            
    $objFiles Files::getInstance();
            
    $objFiles->rrdir($dir."/".$dc->activeRecord->mbdir);

            
    $strKat $dc->activeRecord->mbkat;
            
    $this->Database->prepare("DELETE FROM tl_mb_kategorie WHERE kt_name = '".$strKat."'")
                    ->
    execute();
        }
        }

        public function 
    generateLabel($row,$label)
        {
        if (
    $row['mbdir'] == '')
        {
            
    $label $row['name'];
        }
        
        
    // Inhalt von addIcon aus dem original übernommen
        // es kann nur einen callback geben
        
    $image 'mgroup';
        if (
    $row['disable'] || strlen($row['start']) && $row['start'] > time() || strlen($row['stop']) && $row['stop'] < time())
        {
            
    $image .= '_';
        }

        return 
    sprintf('<div class="list_icon" style="background-image:url(\'system/themes/%s/images/%s.gif\');">%s</div>'$this->getTheme(), $image$label);
        }

    Das funktioniert auch alles Prima, ABER:
    wenn die Gruppe gelöscht wird, und entsprechend das Gruppenverzeichnis und die Kategorie gelöscht werden, dann wird immer nur dir root-Kategorie, also die die beim Anlegen der Gruppe erstellt wurde gelöscht. Nun ist es aber so, dass für die Kategorie auch unter Kategorien angelegt werden(mit der Hand), diese bleiben aber nach dem Entfernen der Gruppe in der DB zurück.

    Es ist ja quasi so, dass tl_kategorie ptable und ctable von sich selbst ist. Das gibt man natürlich nicht an, aber bei sorting-mode 5 kommen beim Einfügen ja diese Einfügeoptionen, genau wie bei der Seitenstruktur. Und es wird das pid-Feld mit der id des darüber liegenden Elements befüllt.

    Ich such jetzt einen "Aufräumjob" der ausgeführt, wenn ein Gruppe (auch die entsprechende root-Kategorie) gelöscht wird, so dass ich eben nicht mehr dies DB-Leichen habe.

    Das muss doch irgendwie gehen... Wenn man mit der Hand, also im BE über Kategorien, eine neue root-Kategorie (pid 0) anlegt und anschließend beliebig viele unter Kategorien anlegt und anschließen die root löscht, dann sind ja auch alle unter-Kategorien weg...

    Ich hoffe mir kann da mal jemand unter die Arme greifen...thx
    Geändert von theguzz (18.10.2010 um 16:17 Uhr)

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Sorting Mode 6 den Titel anpassen
    Von typo im Forum Entwickler-Fragen
    Antworten: 3
    Letzter Beitrag: 23.02.2011, 13:55
  2. Bei sorting->mode=>4 funktioniert label nicht richtig
    Von Dani im Forum Entwickler-Fragen
    Antworten: 2
    Letzter Beitrag: 13.11.2010, 14:31
  3. Mode 4 + Sorting
    Von gintoxin im Forum Entwickler-Fragen
    Antworten: 1
    Letzter Beitrag: 23.08.2010, 22:16
  4. Antworten: 3
    Letzter Beitrag: 21.05.2010, 00:12
  5. Es werden keine Thumbnails angelegt.
    Von Benjamin-Scherf im Forum Bilder/Dateien
    Antworten: 0
    Letzter Beitrag: 05.09.2009, 20:12

Lesezeichen

Lesezeichen

Berechtigungen

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