Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: contao.picker.builder um eigenen Reiter ergänzen

  1. #1
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Standard contao.picker.builder um eigenen Reiter ergänzen

    Hallo,

    ich habe diverse eigene Erweiterungen, zB Produktkatalog.
    Aktuell wird immer per absoluten Pfad verlinkt, um auf eine Detailseite zu kommen.

    Ich möchte einen Reiter beim Link Picker ergänzen neben Seiten/Datei/News/Artikel (siehe Screenshot)
    contao_link_einfuegen.png
    Wo alle Einträge einer bestimmten Tabelle angezeigt werden.

    Und als Link wird dann etwas wie {{meinprodukt::123}} eingefügt.
    Mit einem eigenen InsertTag müsste ich das dann ja wieder zum richtigen Link ändern können.

    Kann mir Jemand einen Tipp gegen?
    Über die Suche finde ich nichts.
    Danke!
    Geändert von kalterwind (18.11.2019 um 10:52 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Standard

    Ich push meinen Eintrag vom März nochmal.

    Ich habe die Reiter reduziert auf Seiten + Dateien:
    Code:
    'providers' => array('pagePicker','filePicker','mmPicker')
    Und habe diese um meinen eigenen Versuch "mmPicker" ergänzt.

    Ich dachte ich kopiere einfach den gesamten Code vom faqPicker (den man auch über providers einbinden könnte).
    Dann müssten die FAQs wieder angezeigt werden, ich weiss es geht und könnte dann den Inhalt ändern.
    Habe wohl einen Denkfehler.

    Code:
    ClassLoader::addClasses(array
    (
    	'MMPickerProvider' => 'system/modules/mm_[...]/modules/mmPicker.php',
    	[...]
    ));
    mmPicker.php

    PHP-Code:
    <?php

    namespace MMBundle;

    use 
    Contao\CoreBundle\Framework\FrameworkAwareInterface;
    use 
    Contao\CoreBundle\Framework\FrameworkAwareTrait;
    use 
    Contao\CoreBundle\Picker\AbstractPickerProvider;
    use 
    Contao\CoreBundle\Picker\DcaPickerProviderInterface;
    use 
    Contao\CoreBundle\Picker\PickerConfig;
    use 
    Contao\FaqCategoryModel;
    use 
    Contao\FaqModel;

    class 
    MMPickerProvider extends AbstractPickerProvider implements DcaPickerProviderInterfaceFrameworkAwareInterface
    {
        use 
    FrameworkAwareTrait;

        
    /**
         * {@inheritdoc}
         */
        
    public function getName()
        {
            return 
    'mmPicker';
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function supportsContext($context)
        {
            return 
    'link' === $context && $this->getUser()->hasAccess('faq''modules');
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function supportsValue(PickerConfig $config)
        {
            return 
    false !== strpos($config->getValue(), '{{faq_url::');
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function getDcaTable()
        {
            return 
    'tl_faq';
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function getDcaAttributes(PickerConfig $config)
        {
            
    $attributes = ['fieldType' => 'radio'];

            if (
    $source $config->getExtra('source')) {
                
    $attributes['preserveRecord'] = $source;
            }

            if (
    $this->supportsValue($config)) {
                
    $attributes['value'] = str_replace(['{{faq_url::''}}'], ''$config->getValue());
            }

            return 
    $attributes;
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function convertDcaValue(PickerConfig $config$value)
        {
            return 
    '{{faq_url::'.$value.'}}';
        }

        
    /**
         * {@inheritdoc}
         */
        
    protected function getRouteParameters(PickerConfig $config null)
        {
            
    $params = ['do' => 'faq'];

            if (
    null === $config || !$config->getValue() || false === strpos($config->getValue(), '{{faq_url::')) {
                return 
    $params;
            }

            
    $value str_replace(['{{faq_url::''}}'], ''$config->getValue());

            if (
    null !== ($faqId $this->getFaqCategoryId($value))) {
                
    $params['table'] = 'tl_faq';
                
    $params['id'] = $faqId;
            }

            return 
    $params;
        }

        
    /**
         * Returns the FAQ category ID.
         *
         * @param int $id
         *
         * @return int|null
         */
        
    private function getFaqCategoryId($id)
        {
            
    /** @var FaqModel $faqAdapter */
            
    $faqAdapter $this->framework->getAdapter(FaqModel::class);

            if (!(
    $faqModel $faqAdapter->findById($id)) instanceof FaqModel) {
                return 
    null;
            }

            if (!(
    $faqCategory $faqModel->getRelated('pid')) instanceof FaqCategoryModel) {
                return 
    null;
            }

            return 
    $faqCategory->id;
        }
    }

    ?>
    Jemand einen Tipp oder gibt es eine Erweiterung, die schon einen eigenen Reiter ergänzt hat, wo man sich etwas abgucken könnte?
    Gruss
    Geändert von kalterwind (18.11.2019 um 11:41 Uhr)

  3. #3
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    terminal42/contao-nodes hat es beispielsweise drin: https://github.com/terminal42/contao...coped_q=picker

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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