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.
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.
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
Moin,
wäre es möglich den JS Code zur Verfügung zu stellen ?
VG
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:
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.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, -1, PHP_ROUND_HALF_ODD);
$intMin = ($intMin > 0) ? ($intMin - 10) : $intMin;
$intMin = ($intMin == 0) ? 5 : $intMin;
// Max.
$intMax = array_pop($arrOptions);
$intMax = round($intMax, -1, PHP_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>
klingt super. Wann kann man denn mit dem vorgefertigtem MM Slider Attribut rechnen ?
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.
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:
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.HTML-Code:<input type="text" name="[]" id="ctrl__0" class="text" value="">
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)
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:
P.S.: cache-deaktivieren bzw. reload nicht vergessemPHP-Code:
// metamodelsfilter_fromto/MetaModels/Filter/Setting/FromTo.php
...
'multiple' => true,
'size' => ($this->get('fromfield') && $this->get('tofield') ? 2 : 1),
// BUGFIX
'urlparam' => $this->getParamName(),
...
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...
Und auch in der Systemwartung den gesamten Cache gelöscht?
Ja, in der Systemwartung auch alles bereinigt.
Ausgabe sieht nach wie vor so aus.
Vor der Klasse unused sind zwei Leerzeichen. Ich nehme an da sollte auch der Spaltenname des Attributs stehen?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>
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, $arrJumpTo, FrontendFilterOptions $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') ? 2 : 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)
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
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
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.
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)
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') ? 2 : 1),
'urlparam' => $this->getParamName(),
'template' => $this->get('template'),
'placeholder' => $arrLabel[0]
),
--
roadrunner for lightning and strike detonator
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)
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."
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."
@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') ? 2 : 1),
'urlparam' => $this->getParamName(),
'template' => $this->get('template'),
'placeholder' => $arrLabel[0]
),
--
roadrunner for lightning and strike detonator
'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)
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."
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') ? 2 : 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
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)
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)
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
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);
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:
Da die Range von 1000 (min-max) / 10 (Anzahl der Steps) = 1000 ist . Oder hab ich dich irgendwie falsch verstanden?Code:start: 0, end: 10000, snap:true, numsteps:10,
*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:
Das ist jetzt ungetestet, die genaue Dokummentation findest du hier: http://mootools.net/docs/more/Types/....Format#NumberCode: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);
Aktive Benutzer in diesem Thema: 2 (Registrierte Benutzer: 0, Gäste: 2)
Lesezeichen