Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 51

Thema: MM (MetaModels) Frontendfilter von-/bis Range Slider

  1. #1
    Contao-Nutzer
    Registriert seit
    20.11.2010.
    Ort
    Dresden
    Beiträge
    51

    Frage MM (MetaModels) Frontendfilter von-/bis Range Slider

    Hi, ich benötige eine Verständnishilfe:

    Ich möchte gern diese UI ( http://jqueryui.com/slider/#range ) mit einen MetaModel-Filter umsetzen.
    Wie würdet Ihr vorgehen? Ich habe bereits ein Attribut mit einer Zahlenreihe von 1-10.

  2. #2
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Wir haben auf dieser Seite (http://www.schuhpark.de/kollektion/schuhfinder) das normale Decimal Attribut und einen von/bis Filter verwendet. Der Rest ist ja nur noch JS

  3. #3
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Moin,

    wäre es möglich den JS Code zur Verfügung zu stellen ?

    VG

  4. #4
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Da gibts nicht viel JS was ich dir anbieten kann. Wir haben uns das Script hier geschnappt und einfach eingebaut. Alternativ kann ich diese beiden Scripte anbieten. Je nachdem ob Mootools oder jQuery benötigt wird.

    http://andreruffert.github.io/rangeslider.js/
    http://refreshless.com/nouislider/

    Das ausgeklügelte (und leider auch aufgrund der Zeitvorgabe etwas schnell zusammengebastelte) Template war da eher die Herausforderung:

    PHP-Code:
    <?php
    // Add JS/CSS
    $GLOBALS['TL_JAVASCRIPT']['mm_range_slider_mootools'] = 'system/modules/metamodelsfilter_fromto_slider/html/js/slider.js';
    $GLOBALS['TL_CSS']['mm_range_slider_mootools'] = 'system/modules/metamodelsfilter_fromto_slider/html/css/slider.css';

    // Get the id for submit.
    $strInputId $this->raw['eval']['urlparam'];
    // Get min and max values.
    $arrOptions $this->raw['options'];
    // Min.
    $intMin current($arrOptions);
    $intMin round($intMin, -1PHP_ROUND_HALF_ODD);
    $intMin = ($intMin 0) ? ($intMin 10) : $intMin;
    $intMin = ($intMin == 0) ? $intMin;
    // Max.
    $intMax array_pop($arrOptions);
    $intMax round($intMax, -1PHP_ROUND_HALF_UP);
    $intMax = ($intMax 10);
    // Current values.
    $arrCurrentMin = ($this->raw['value'][0] == null) ? $intMin $this->raw['value'][0];
    $arrCurrentMax = ($this->raw['value'][1] == null) ? $intMax $this->raw['value'][1];
    ?>

    <div class="invisible">
        <?php echo $this->formfield?>
    </div>


    <div class="slider_outer">
        <div class="slide_container">
            <div id="slider_minmax_min">min</div>
            <div id="slider_minmax_max">max</div>
            <div class="slider_gutter" id="minmax_slider">
                <div id="slider_minmax_gutter_l" class="slider_gutter_item iconsprite_controls"></div>
                <div id="slider_minmax_gutter_m" class="slider_gutter_item gutter iconsprite_controls">
                    <div id="slider_gutter_bkg_minmax" class="slider_gutter_bkg"></div>
                    <img id="slider_bkg_img" src="system/modules/metamodelsfilter_fromto_slider/html/images/slider-line-blue.png"/>
                    <div id="slider_minmax_minKnobA" class="knob_left"></div>
                    <div id="slider_minmax_maxKnobA" class="knob_right"></div>
                </div>
                <div id="slider_minmax_gutter_r" class="slider_gutter_item iconsprite_controls"></div>
            </div>
            <div class="clearfix"></div>
        </div>
    </div>

    <script type="text/javascript">

        // ON LOAD
        window.addEvent('domready', function ()
        {
            var firstRun<?php echo $strInputId?> = true;
            new Slider($('slider_minmax_gutter_m'), $('slider_minmax_minKnobA'), $('slider_bkg_img'), {
                start: <?php echo intval($intMin); ?>,
                end: <?php echo intval($intMax); ?>,
                offset: 8,
                snap: false,
                onChange: function (pos)
                {
                    $('slider_minmax_min').set('text', 'von ' + pos.minpos + ' €');
                    $('slider_minmax_max').set('text', 'bis ' + pos.maxpos + ' €');

                    if(pos.minpos != <?php echo intval($intMin); ?> || pos.maxpos != <?php echo intval($intMax); ?>)
                    {
                        $('ctrl_<?php echo $strInputId?>_0').set('value', pos.minpos);
                        $('ctrl_<?php echo $strInputId?>_1').set('value', pos.maxpos);
                    }
                    else
                    {
                        $('ctrl_<?php echo $strInputId?>_0').set('value', '');
                        $('ctrl_<?php echo $strInputId?>_1').set('value', '');
                    }
                },
                onComplete: function (pos)
                {
                    if(firstRun<?php echo $strInputId?> == true)
                    {
                        return;
                    }

                    $('slider_minmax_min').set('text', 'von ' + pos.minpos + ' €');
                    $('slider_minmax_max').set('text', 'bis ' + pos.maxpos + ' €');

                    if(pos.minpos != <?php echo intval($intMin); ?> || pos.maxpos != <?php echo intval($intMax); ?>)
                    {
                        $('ctrl_<?php echo $strInputId?>_0').set('value', pos.minpos);
                        $('ctrl_<?php echo $strInputId?>_1').set('value', pos.maxpos);
                    }
                    else
                    {
                        $('ctrl_<?php echo $strInputId?>_0').set('value', '');
                        $('ctrl_<?php echo $strInputId?>_1').set('value', '');
                    }

                    if(pos.minpos != <?php echo intval($arrCurrentMin); ?> ||  pos.maxpos != <?php echo intval($arrCurrentMax); ?>)
                    {
                        var parent = $('ctrl_<?php echo $strInputId?>_0').getParent('form');
                        parent.submit();
                    }
                }
            }, $('slider_minmax_maxKnobA')).setMin(<?php echo intval($arrCurrentMin); ?>).setMax(<?php echo intval($arrCurrentMax); ?>);

            firstRun<?php echo $strInputId?> = false;
        });


    </script>
    Das Template haben wir in einer extra abgelegten Extension "metamodelsfilter_fromto_slider" abgelegt und dann das Template im Filter ausgewählt. Ich würde dir aber raten einfach ein Filtertemplate updatesicher unter /templates abzulegen, da wir als MetaModels Team planen solch ein Attribut noch allgemeingültig anzubieten. Und dann könnten wir uns mit deinem Slider überschreiben.

  5. #5
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    klingt super. Wann kann man denn mit dem vorgefertigtem MM Slider Attribut rechnen ?

  6. #6
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Wenn wir dazu Zeit und Lust finden Derzeit haben wir keinen eigenen Bedarf und ich sehe auch in den nächsten Wochen/Monaten keinen. Wenn du uns dafür buchen willst, ziehen wir das gerne vor. Solange wirst du erstmal selbst Hand anlegen müssen.

  7. #7
    Contao-Nutzer
    Registriert seit
    22.09.2011.
    Ort
    Stuttgart
    Beiträge
    12

    Standard

    Ich plane ebenfalls einen From-To Slider in eine bestehende Website einzubinden. Leider scheitere ich momentan daran, dass der Filter von/bis nicht korrekt zu funktionieren scheint. Im Front-End wird folgender HTML-Code ausgegeben:

    HTML-Code:
    <input type="text" name="[]" id="ctrl__0" class="text" value="">
    Der Filter ist komplett wirkungslos. Nach Eingabe eines Wertes wird die Seite zwar neugeladen, es passiert jedoch nichts. Versucht habe ich die Attribute numeric und decimal.

    Andere MetaModels-Filter funktionieren dagegen reibungslos. Die momentan verwendete contao Version ist 3.2.7. Die eingesetzten Meta-Models Versionen sind alle dev-contao3. Eventuell liegt hier mein Problem?


    Edit: noUiSlider wurde bereits genannt.
    Geändert von ThorstenR (02.06.2014 um 18:11 Uhr)

  8. #8
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard bug

    Hey,

    ja, da ist ein Bug in der metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php:

    Zeile 210, der urlparam muss durch $this->getParamName() gesetzt werden.

    Also:
    PHP-Code:
    // metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php
    ...
    'multiple'  => true,
    'size'      => ($this->get('fromfield') && $this->get('tofield') ? 1),

    // BUGFIX
    'urlparam'  => $this->getParamName(),
    ... 
    P.S.: cache-deaktivieren bzw. reload nicht vergessem

  9. #9
    Contao-Nutzer
    Registriert seit
    22.09.2011.
    Ort
    Stuttgart
    Beiträge
    12

    Standard

    Danke für die Hilfe!

    Leider hat sich noch nichts geändert. Eventuell habe ich das mit dem Cache nicht korrekt verstanden. In den Front-End Einstellungen habe ich den Cache deaktiviert. In den globalen Einstellungen habe ich "Internen Cache umgehen" angehakt...

  10. #10
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Und auch in der Systemwartung den gesamten Cache gelöscht?

  11. #11
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Zitat Zitat von YuriOrlovBtf Beitrag anzeigen
    Hey,

    ja, da ist ein Bug in der metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php:

    Zeile 210, der urlparam muss durch $this->getParamName() gesetzt werden.

    Also:
    PHP-Code:
    // metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php
    ...
    'multiple'  => true,
    'size'      => ($this->get('fromfield') && $this->get('tofield') ? 1),

    // BUGFIX
    'urlparam'  => $this->getParamName(),
    ... 
    P.S.: cache-deaktivieren bzw. reload nicht vergessem
    Ich nehme du beziehst dich auf eine Contao 3 Version? Kannst du uns dafür einen PR stellen oder zumindest ein Ticket schreiben?

  12. #12
    Contao-Nutzer
    Registriert seit
    22.09.2011.
    Ort
    Stuttgart
    Beiträge
    12

    Standard

    Ja, in der Systemwartung auch alles bereinigt.

    Ausgabe sieht nach wie vor so aus.

    HTML-Code:
    <div class="widget mm_multitext  unused submitonchange">
    <label>Lux von / bis</label>
    <input type="text" name="[]" id="ctrl__0" class="text" value="">
    <input type="text" name="[]" id="ctrl__1" class="text" value=""></div>
    Vor der Klasse unused sind zwei Leerzeichen. Ich nehme an da sollte auch der Spaltenname des Attributs stehen?

  13. #13
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    sofern du contao3 benutzt, ersetze die Datei metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php mit dieser:
    (Provisorium bis was besseres kommt)

    PHP-Code:
    <?php

    /**
     * The MetaModels extension allows the creation of multiple collections of custom items,
     * each with its own unique set of selectable attributes, with attribute extendability.
     * The Front-End modules allow you to build powerful listing and filtering of the
     * data in each collection.
     *
     * PHP version 5
     * @package    MetaModels
     * @subpackage FilterFromTo
     * @author     Christian de la Haye <service@delahaye.de>
     * @copyright  The MetaModels team.
     * @license    LGPL.
     * @filesource
     */

    namespace MetaModels\Filter\Setting;

    use 
    MetaModels\Filter\IFilter;
    use 
    MetaModels\Filter\Rules\SimpleQuery;
    use 
    MetaModels\Filter\Rules\StaticIdList;
    use 
    MetaModels\FrontendIntegration\FrontendFilterOptions;
    use 
    MetaModels\Helper\ContaoController;

    /**
     * Filter "value from x to y" for FE-filtering, based on filters by the meta models team.
     *
     * @package       MetaModels
     * @subpackage FilterFromTo
     * @author     recode: Henry Lamorski <henry.lamorski@gmail.com>, origin: Christian de la Haye <service@delahaye.de>
     */
    class FromTo extends Simple
    {
        
    /**
         * {@inheritdoc}
         */
        
    protected function getParamName()
        {
            if (
    $this->get('urlparam'))
            {
                return 
    $this->get('urlparam');
            }

            
    $objAttribute $this->getMetaModel()->getAttributeById($this->get('attr_id'));
            if (
    $objAttribute)
            {
                return 
    $objAttribute->getColName();
            }

        }


        
    /**
         * {@inheritdoc}
         */
        
    public function prepareRules(IFilter $objFilter$arrFilterUrl)
        {
            

            
    $objMetaModel $this->getMetaModel();
            
    $objAttribute $objMetaModel->getAttributeById($this->get('attr_id'));
            
    $strParamName $this->getParamName();
            
    $strColname $objAttribute->getColName();
                
            
    // type:  $objAttribute->get('type');  // timestamp...


            
    $arrParamValue NULL;
            if (
    array_key_exists($strParamName$arrFilterUrl) && !empty($arrFilterUrl[$strParamName]))
            {

                
                if (
    is_array($arrFilterUrl[$strParamName]))
                {
                    
    $arrParamValue $arrFilterUrl[$strParamName];
                } else {
                    
    // TODO: still unsure if double underscore is such a wise idea.
                    
    $arrParamValue explode('__'$arrFilterUrl[$strParamName]);
                }

                
    // if attr_type==timestamp ? transform datestring to unixtimestamp
                
    if ($objAttribute->get('type') == 'timestamp')
                {
                    
    // TODO: make Contao Date()-Class useable, $objData is still empty (why?)
                    
    $objDate ContaoController::getInstance()->import('Date');

                    foreach(
    $arrParamValue AS $dateStrKey => $dateStrVal
                    {
                        
    // TODO: use Date()-Class for Date-String operations, we need the 
                        // unix_timestamp for the Database-Query
                    
                        // <dirty code work only with "d.m.Y"-Pattern yet>
                        
    list($d,$m,$y) = explode(".",$dateStrVal);
                        
    $arrParamValue[$dateStrKey] = mktime(0,0,0,$m,$d,$y);
                        
    // </dirty code>

                    
    }
                }


            }

            if (
    $objAttribute && $strParamName && $arrParamValue && ($arrParamValue[0] || $arrParamValue[1]))
            {
                
    $strMore $this->get('moreequal') ? '>=' '>';
                
    $strLess $this->get('lessequal') ? '<=' '<';

                
    $arrQuery = array();
                
    $arrParams = array();


                if(
    $this->get('fromfield'))
                {
                    if (
    $arrParamValue[0])
                    {
                        
    $arrQuery[] = sprintf('(%s%s?)'$objAttribute->getColName(), $strMore);
                        
    $arrParams[] = $arrParamValue[0];
                    }
                    if (
    $arrParamValue[1])
                    {
                        
    $arrQuery[] = sprintf('(%s%s?)'$objAttribute->getColName(), $strLess);
                        
    $arrParams[] = $arrParamValue[1];
                    }
                }
                else
                {
                    if (
    $arrParamValue[0])
                    {
                        
    $arrQuery[] = sprintf('(%s%s?)'$objAttribute->getColName(), $strLess);
                        
    $arrParams[] = $arrParamValue[0];
                    }
                }

                

                
    $objFilter->addFilterRule(new SimpleQuery(
                    
    sprintf('SELECT id FROM %s WHERE '$this->getMetaModel()->getTableName()) . implode(' AND '$arrQuery), $arrParams));
                return;
            }

            
    $objFilter->addFilterRule(new StaticIdList(NULL));
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function getParameters()
        {
            return (
    $strParamName $this->getParamName()) ? array($strParamName) : array();
        }


        
    /**
         * {@inheritdoc}
         */
        
    public function getParameterFilterNames()
        {
            return array(
                
    $this->getParamName() => ($this->get('label') ? $this->get('label') : $this->getMetaModel()->getAttributeById($this->get('attr_id'))->getName())
            );
        }


        
    /**
         * {@inheritdoc}
         */
        
    public function getParameterFilterWidgets($arrIds$arrFilterUrl$arrJumpToFrontendFilterOptions $objFrontendFilterOptions)
        {
            
    $objAttribute $this->getMetaModel()->getAttributeById($this->get('attr_id'));

            
    $arrOptions $objAttribute->getFilterOptions(($this->get('onlypossible') ? $arrIds NULL), (bool)$this->get('onlyused'));

            
    // Remove empty values from list.
            
    foreach ($arrOptions as $mixKeyOption => $mixOption)
            {
                
    // Remove html/php tags.
                
    $mixOption strip_tags($mixOption);
                
    $mixOption trim($mixOption);

                if(
    $mixOption === '' || $mixOption === null)
                {
                    unset(
    $arrOptions[$mixKeyOption]);
                }
            }

            
    $arrLabel = array(
                (
    $this->get('label') ? $this->get('label') : $objAttribute->getName()),
                
    'GET: '.$this->get('urlparam')
            );

            if(
    $this->get('fromfield') && $this->get('tofield'))
            {
                
    $arrLabel[0] .= ' '.$GLOBALS['TL_LANG']['metamodels_frontendfilter']['fromto'];
            }
            elseif(
    $this->get('fromfield') && !$this->get('tofield'))
            {
                
    $arrLabel[0] .= ' '.$GLOBALS['TL_LANG']['metamodels_frontendfilter']['from'];
            }
            else
            {
                
    $arrLabel[0] .= ' '.$GLOBALS['TL_LANG']['metamodels_frontendfilter']['to'];
            }

            
    $arrUrlValue $arrFilterUrl[$this->getParamName()];
            

            
    // split up our param so the widgets can use it again.
            
    $strParamName $this->getParamName(); // test
            
    $arrMyFilterUrl $arrFilterUrl// test => 1__2

            
            // if we have a value, we have to explode it by double underscore to have a valid value which the active checks may cope with.
            
    if (array_key_exists($strParamName$arrFilterUrl) && !empty($arrFilterUrl[$strParamName]))
            {
                if (
    is_array($arrFilterUrl[$strParamName]))
                {
                    
    $arrParamValue $arrFilterUrl[$strParamName];
                } else {
                    
    // TODO: still unsure if double underscore is such a wise idea.
                    
    $arrParamValue explode('__'$arrFilterUrl[$strParamName], 2);
                }

                if (
    $arrParamValue && ($arrParamValue[0] || $arrParamValue[1]))
                {
                    
    $arrMyFilterUrl[$strParamName] = $arrParamValue;
                } else {
                    
    // no values given, clear the array.
                    
    $arrParamValue NULL;
                }

            }

            
    $GLOBALS['MM_FILTER_PARAMS'][] = $this->getParamName();


            return array(
                
    $this->getParamName() => $this->prepareFrontendFilterWidget(
                    array
                    (
                        
    'label'     => $arrLabel,
                        
    'inputType' => 'multitext',
                        
    'options'   => $arrOptions,
                        
    'eval'      => array
                        (
                            
    'multiple'  => true,
                            
    'size'      => ($this->get('fromfield') && $this->get('tofield') ? 1),
                            
    'urlparam'  => $this->getParamName(),
                            
    'template'  => $this->get('template'),
                        ),
                        
    // we need to implode to have it transported correctly in the frontend filter.
                        // TODO: still unsure if double underscore is such a wise idea.
                        
    'urlvalue' => !empty($arrParamValue) ? implode('__'$arrParamValue) : ''
                    
    ),
                    
    $arrMyFilterUrl,
                    
    $arrJumpTo,
                    
    $objFrontendFilterOptions
                
    )
            );





        }

        
    /**
         * Retrieve the attribute name that is referenced in this filter setting.
         *
         * @return array
         */
        
    public function getReferencedAttributes()
        {
            if (!(
    $this->get('attr_id') && ($objAttribute $this->getMetaModel()->getAttributeById($this->get('attr_id')))))
            {
                return array();
            }

            return array(
    $objAttribute->getColName());
        }
    }
    Geändert von YuriOrlovBtf (03.06.2014 um 11:14 Uhr)

  14. #14
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von andreasisaak Beitrag anzeigen
    Ich nehme du beziehst dich auf eine Contao 3 Version? Kannst du uns dafür einen PR stellen oder zumindest ein Ticket schreiben?
    ich bin dabei, die Filter "Wert von/bis" und "2 Felder mit Werten" in einem Filter zusammenzufassen. Außerdem soll das timestamp-Attribut unterstützt werden.
    Wenn fertig, dann PR.

    p.s. ausschließlich mit cn3 komatibel.

  15. #15
    Contao-Nutzer
    Registriert seit
    22.09.2011.
    Ort
    Stuttgart
    Beiträge
    12

    Standard

    Danke für das Skript, leider besteht mein Problem noch immer. Es hat sich an der Ausgabe nichts verändert.

    Contao ist Version 3.2.7, MetaModels wurde über Composer installiert.

  16. #16
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von ThorstenR Beitrag anzeigen
    Danke für das Skript, leider besteht mein Problem noch immer. Es hat sich an der Ausgabe nichts verändert.

    Contao ist Version 3.2.7, MetaModels wurde über Composer installiert.
    kannst Du bitte prüfen, ob:

    a) Du die Filtereinstellungen wie im Bild gesetzt hast
    b) die Filter URL im FE dem Muster <attribut>/<inputFeld1>__<inputFeld2>.html entspricht?

    configFilter.png
    filterurl.png

  17. #17
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Hi,

    bin über den gleichen Bug wie Thorsten gestolpert, habe das Script ersetzt, alle Caches geleert und Seite neu geladen => ohne Erfolg.
    Filtereinstellungen sind identisch mit dem o.g. image. In der Url verändert sich nach der Werteingabe nichts. Obwohl die Seite neu geladen wird ist die URL die gleiche wie zuvor. Worauf deutet das denn hin ?

  18. #18
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    Hi,

    bin über den gleichen Bug wie Thorsten gestolpert, habe das Script ersetzt, alle Caches geleert und Seite neu geladen => ohne Erfolg.
    Filtereinstellungen sind identisch mit dem o.g. image. In der Url verändert sich nach der Werteingabe nichts. Obwohl die Seite neu geladen wird ist die URL die gleiche wie zuvor. Worauf deutet das denn hin ?
    ich habe hier eine Testumgebung mit euerm Setup nebst Testdaten erzeugt.
    Jedoch habe ich keine Composer verwendet. Ist es vielleicht möglich, dass der Composer einen direkten Eingriff in den Core einer Erweiterung unmöglich macht?

    user: thread
    pass: demodemo

  19. #19
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Wenn man Composer nutzt, darf man Änderungen einfach nicht mehr unter system/modules/... machen. Sondern unter /composer/vendor/metamodels/..., da Composer die Extension nur noch von dort lädt. Ich vermute das ist auch einer der Gründe warum es bei manchen nicht funktioniert, wenn sie deine Anpassungen durchführen. Sie greifen schlicht nicht.

  20. #20
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Hi Andreas,

    der Bugfix von Yuri funktioniert, wenn man die FromTo.php in Deinen besagten Pfad editiert / Composer verwendet. Danke für die Hilfe !
    Kann es sein, dass meine manuellen Installationsprobleme (von Perimetersearch und Notelist) auch durch fehlerhafte Verwendung des Standart Modules Verzeichnisses statt des Modules Unterverzeichnis von Composer resultieren ?

    Wie bekäme man denn eine Vorbelegung des Input Feldes (Parameter: Kg, Preis, etc), die beim Klick ins Feld verschwindet ?

    VG
    Geändert von taktell81 (05.06.2014 um 20:26 Uhr)

  21. #21
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    Wie bekäme man denn eine Vorbelegung des Input Feldes (Parameter: Kg, Preis, etc), die beim Klick ins Feld verschwindet ?
    VG

    Dafür brauchst Du nur den dca des betreffenden Filters anpassen und 'placeholder' definieren:

    PHP-Code:
     'label'     => $arrLabel,
                        
    'inputType' => 'multitext',
                        
    'options'   => $arrOptions,
                        
    'eval'      => array
                        (
                            
    'multiple'  => true,
                            
    'size'      => ($this->get('fromfield') && $this->get('tofield') ? 1),
                            
    'urlparam'  => $this->getParamName(),
                            
    'template'  => $this->get('template'),
                
    'placeholder' => $arrLabel[0]
                        ), 
    --
    roadrunner for lightning and strike detonator

  22. #22
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Sry, wo definiert man genau den Inhalt des Placeholders;
    edit: also die Einheit z.B. KG ?

    Besten Gruß
    Geändert von taktell81 (10.06.2014 um 20:18 Uhr)

  23. #23
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    Sry, wo definiert man genau den Inhalt des Placeholders ?

    Besten Gruß
    im FIlter: Datei metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php, ca. ab Zeile 240
    --
    roadrunner for lightning and strike detonator

  24. #24
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hey YuriOrlovBtf,
    wollte mal kurz nachfragen ob du das auch schon direkt mit dem tng versucht hattest oder ob das noch für die aktuelle Variante von MM ist.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  25. #25
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von MacKP Beitrag anzeigen
    Hey YuriOrlovBtf,
    wollte mal kurz nachfragen ob du das auch schon direkt mit dem tng versucht hattest oder ob das noch für die aktuelle Variante von MM ist.

    Viele Grüße
    hey MacKP,

    nee, die TNG-Version habe ich noch garnicht angeschaut. Gibt's da ein Changelog/Neuerungsliste?
    --
    roadrunner for lightning and strike detonator

  26. #26
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ne, ne Liste gibts glaub ich noch nicht so wirklich.. kenne zumindest keine ^^
    Ist allerdings schon recht weit und bringt echt schicke Dinge mit (Hirarchien in einem MM ... ).

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  27. #27
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    @Yuri #21

    mit DCA meinst Du warscheinlich den Kollegen oder: metamodelfilter_fromto/dca/tl_metamodel_filtersetting
    wat muss denn da genau rinn ?

  28. #28
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    @Yuri #21

    mit DCA meinst Du warscheinlich den Kollegen oder: metamodelfilter_fromto/dca/tl_metamodel_filtersetting
    wat muss denn da genau rinn ?
    nee, ich meine die Datei "metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php", ca. ab Zeile 240

    PHP-Code:
    'label'     => $arrLabel,
                        
    'inputType' => 'multitext',
                        
    'options'   => $arrOptions,
                        
    'eval'      => array
                        (
                            
    'multiple'  => true,
                            
    'size'      => ($this->get('fromfield') && $this->get('tofield') ? 1),
                            
    'urlparam'  => $this->getParamName(),
                            
    'template'  => $this->get('template'),
                
    'placeholder' => $arrLabel[0]
                        ), 
    --
    roadrunner for lightning and strike detonator

  29. #29
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    'placeholder' => $arrLabel[0]

    Ok, so übernehmen alle Placeholder einfach die ensprechenden die Labels. Gibt es eine Möglichkeit den Inhalt für unterschiedlichen Placeholder frei zu bestimmen ?

    VG
    Geändert von taktell81 (13.06.2014 um 10:55 Uhr)

  30. #30
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Kleine Anmerkung:
    der tng hat inzwischen auch einen kleinen from-to Filter für ein Datum bekommen.
    Der guckt allerdings nur in einem Feld (also z.b. 1. Datum) nach. Ist also erst mal nur eine kleine Grundlage zum Starten.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  31. #31
    Contao-Nutzer Avatar von YuriOrlovBtf
    Registriert seit
    14.09.2012.
    Beiträge
    40

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    'placeholder' => $arrLabel[0]

    Ok, so übernehmen alle Placeholder einfach die ensprechenden die Labels. Gibt es eine Möglichkeit den Inhalt für unterschiedlichen Placeholder frei zu bestimmen ?

    VG
    ja, dafür musst Du jedoch den MetaModels Core etwas aufbohren:

    Datei: system/modules/metamodels/MetaModels/Widgets/MultiTextWidget.php
    PHP-Code:
    <?php
    /**
     * The MetaModels extension allows the creation of multiple collections of custom items,
     * each with its own unique set of selectable attributes, with attribute extendability.
     * The Front-End modules allow you to build powerful listing and filtering of the
     * data in each collection.
     *
     * PHP version 5
     * @package    MetaModels
     * @subpackage FrontendFilter
     * @author     Christian de la Haye <service@delahaye.de>
     * @copyright  The MetaModels team.
     * @license    LGPL.
     * @filesource
     */

    namespace MetaModels\Widgets;

    /**
     * Form field with more than 1 input, based on form field by Leo Feyer
     *
     * @package       MetaModels
     * @subpackage FrontendFilter
     * @author     Christian de la Haye <service@delahaye.de>
     * @add Label-Stuff henry.lamorski@mailbox.org
     */
    class MultiTextWidget extends \Widget
    {
        
    /**
         * Submit user input.
         *
         * @var boolean
         */
        
    protected $blnSubmitInput true;

        
    /**
         * The template to use.
         *
         * @var string
         */
        
    protected $strTemplate 'form_widget';

        
    /**
         * Add specific attributes.
         *
         * @param string $strKey   Name of the key to set.
         *
         * @param mixed  $varValue The value to use.
         *
         * @return void
         */
        
    public function __set($strKey$varValue)
        {
            switch (
    $strKey)
            {
                case 
    'maxlength':
                    if (
    $varValue 0)
                    {
                        
    $this->arrAttributes['maxlength'] =  $varValue;
                    }
                    break;

                case 
    'mandatory':
                    if (
    $varValue)
                    {
                        
    $this->arrAttributes['required'] = 'required';
                    }
                    else
                    {
                        unset(
    $this->arrAttributes['required']);
                    }
                    
    parent::__set($strKey$varValue);
                    break;

                case 
    'placeholder':
                    
    $this->arrAttributes['placeholder'] = $varValue;
                    break;

                default:
                    
    parent::__set($strKey$varValue);
                    break;
            }
        }

        
    /**
         * Trim the values and validate them.
         *
         * @param mixed $varInput The value to process.
         *
         * @return mixed The processed value
         */
        
    protected function validator($varInput)
        {
            if (
    is_array($varInput))
            {
                return 
    parent::validator($varInput);
            }

            return 
    parent::validator(trim($varInput));
        }


        
    /**
         * Generate the widget and return it as string.
         *
         * @return string
         */
        
    public function generate()
        {
            
    $return '';
            for (
    $i 0$i $this->size$i++)
            {
                
    $return .= sprintf('<input type="%s" name="%s[]" placeholder="%s" id="ctrl_%s_%s" class="text%s%s" value="%s"%s%s',
                    
    'text',
                    
    $this->strName,
                    
    $this->arrAttributes['placeholder'][$i],
                    
    $this->strId,
                    
    $i,
                    
    '',
                    (
    strlen($this->strClass) ? ' ' $this->strClass ''),
                    
    specialchars($this->varValue[$i]),
                    
    $this->getAttributes(),
                    
    $this->strTagEnding);
            }

            return 
    $return;
        }
    }

    und in der Datei metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php", ca. ab Zeile 240
    :
    PHP-Code:
    'label'     => $arrLabel,
                        
    'inputType' => 'multitext',
                        
    'options'   => $arrOptions,
                        
    'eval'      => array
                        (
                            
    'multiple'  => true,
                            
    'size'      => ($this->get('fromfield') && $this->get('tofield') ? 1),
                            
    'urlparam'  => $this->getParamName(),
                            
    'template'  => $this->get('template'),
                            
    // für jedes Feld (Anzahl in sitze def) ein Label setzen, wobei der Key der Labelnummer entspricht
                            
    'placeholder' => array(0=>'ein Label'1=>$arrLabel[0]), 
                        ), 
    --
    roadrunner for lightning and strike detonator

  32. #32
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Hi Yuri,

    das funktioniert einwandfrei, sofern ich den Filter mit beiden Werten (From & To) verwende. Was Du nicht wissen konntest:
    ich habe zwei Fromto Filter eingebunden:
    1. FromTo zeigt nur das VON Feld (Wunsch: Placeholder kg)
    2. FromTo zeigt nur das BIS Feld (Wunsch: Placeholder )

    Ist diese Umetzung auch möglich ?

    (Anmerkung: Bei Verwendung vom Composer müssen die genannten Files im Composer Unterverzeichnis edtiert werden !)
    Geändert von taktell81 (17.06.2014 um 11:55 Uhr)

  33. #33
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Zitat Zitat von andreasisaak Beitrag anzeigen
    Da gibts nicht viel JS was ich dir anbieten kann. Wir haben uns das Script hier geschnappt und einfach eingebaut.
    Hi Andreas, ich bin aktuell mit der händischen Umsetzung des Range Sliders beschäftigt.

    Der Slider mit zwei - an der linken Seite ausgerichteten - Knobs.
    Die Knobs lassen sich nicht bewegen und geben auch keine Werte im FE aus[/B],

    Das Problem ist wohl mit einer fehlerhaften Einbindung der js Datei(en) zu erklären oder?
    Wie binde ich die Js-files am besten ein ? template ?

    VG
    Geändert von taktell81 (18.06.2014 um 11:11 Uhr)

  34. #34
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard gelöst

    ok es funktioniert:

    <script type="text/javascript" src="files/rangeslider/mootools12_all_p.js"></script>
    <script type="text/javascript" src="files/rangeslider/slider.js"></script>

    VG

  35. #35
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Hi Andreas,

    magst Du mir kurz weiterhelfen, wie man den Slider in (bsp. 1000er) Schritten rastern kann ?

    VG

  36. #36
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    Hi Andreas,

    magst Du mir kurz weiterhelfen, wie man den Slider in (bsp. 1000er) Schritten rastern kann ?

    VG
    Du kannst das Raster einschalten und die Anzahl der Schritte angeben, in dem du bei den Optionen snap auf "true" setzt und bei numsteps die Anzahl der Schritte angibst. Die Schirttgröße berechnet der Slider dann von alleine. Siehe auch das Beispiel von der Demo Seite:
    Code:
    var mySlideC = new Slider($('slider_gutter_C'), $('slider_knob_C'), $('slider_bkg_img_C'),{
         start: 0,
         end: 150,
         offset:0,
         snap:true, 
         numsteps:10,
         onChange: function(pos){
               $('slider_current_val_2').setHTML(pos + ' inches');
         }
    }, null).setMin(30);

  37. #37
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    moin Thraile,

    wie würde man denn eine Punkt-Trennung bei der 1.000er Stelle realisieren ?

    VG

  38. #38
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Zitat Zitat von taktell81 Beitrag anzeigen
    moin Thraile,

    wie würde man denn eine Punkt-Trennung bei der 1.000er Stelle realisieren ?

    VG
    Bin nicht ganz sicher, was du erreichen willst. Einen Slider der in 1000er-Schritten zu benutzen ist? Wenn deine Slider von 0 bis 1000 geht, stellst du den Slider wie folgt ein:

    Code:
         start: 0,
         end: 10000,
         snap:true, 
         numsteps:10,
    Da die Range von 1000 (min-max) / 10 (Anzahl der Steps) = 1000 ist . Oder hab ich dich irgendwie falsch verstanden?

  39. #39
    Contao-Nutzer
    Registriert seit
    21.01.2014.
    Ort
    Kiel
    Beiträge
    131

    Standard

    Zitat Zitat von Thraile Beitrag anzeigen
    Oder hab ich dich irgendwie falsch verstanden?
    Hi
    Nee das funktioniert schon...
    Ich möchte nur die Werteanzeige dazu bewegen einen Punkt nach der dritten Ziffen von rechts zu setzen um mehr Übersichtlichkeit zu schaffen, verstehst. Mergwürdiges Anliegen, ich weiss

    VG

  40. #40
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    *lach* Achso! Das kannst du beim bei der onChange-Funktion ändern, da wird ja der Wert von min und max gesetzt. Mootools hat da auch passende Funktionen dafür:

    Code:
    var mySlideA = new Slider($('slider_minmax_gutter_m'), $('slider_minmax_minKnobA'),$('slider_bkg_img'), {
    		start: 0,
    		end: 5,
    		offset:8,
    		snap:false,
    		onChange: function(pos){$('slider_minmax_min').setHTML('min '+(pos.minpos).format({group: "."}));$('slider_minmax_max').setHTML('max '+(pos.maxpos).format({group: "."}));}
    	}, $('slider_minmax_maxKnobA')).setMin(2).setMax(3);
    Das ist jetzt ungetestet, die genaue Dokummentation findest du hier: http://mootools.net/docs/more/Types/....Format#Number

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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