Formato data alla ricerca avanzata
-
22-10-2019 - |
Domanda
Il mio locale è impostato per la Francia, ma la ricerca avanzata funziona solo in formato USA. Ho fatto un attributo personalizzato (tipo data) e aggiungerlo alla ricerca avanzata. E ci sono 3 problemi:
- Il datepicker (default) lavora in formato noi, non importa quale Locale ho impostato (la traduzione Datepicker è ok)
- La ricerca avanzata funziona solo in formato USA. Se modifico il formato (valori url) da gg / mm / aa al gg / mm / aa ottengo alcun risultato
- La convalida della data sembra scegliere il locale dal browser. Il mio locale di default è de_DE, quindi una data degli Stati Uniti "03/13/14" non è valido e non posso eseguire la ricerca. Se cambio la locale browser per en_US tutto funziona. (Ma con locale US)
Domande:? Come forzare Magento per il lavoro con le impostazioni specificate impostazioni internazionali (fr_FR) nella ricerca avanzata e validatore e di ignorare le impostazioni locali del browser
Io lavoro con l'edizione comunità. Il problema è lo stesso per la versione 1.7 e 1.8.
UPDATE:
Ho trovato il posto in cui viene rilevato il locale del browser:
app/code/core/Mage/CatalogSearch/Model/Resource/Advanced/Collection.php
if (!Zend_Date::isDate($conditionValue['from'])) {
Mage::throwException($invalidDateMessage);
}
app/code/core/Zend/Date.php
$locale = Zend_Locale::findLocale($locale);
Se cambio al seguente posso forzare la localizzazione su en_US ad esempio:
if (!Zend_Date::isDate($conditionValue['from'], null, 'en_US')) {
Mage::throwException($invalidDateMessage);
}
Il codice problematico successiva in cui viene codificato il formato della data è in:
app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php
->setFormat('%m/%d/%y')
L'unica cosa che non riesco a trovare è dove la query di ricerca è costruire per il tipo di data. Sembra che il formato della data è harcoded su en_US in più luoghi in tutto il codice o il locale impostato è totalmente ignorato che fa davvero schifo!
Soluzione
ho avuto problema simile con filtro Data :)
Il tempo della data un'istanza modo nella forma del genere
Fase 1: -
Nel Blocco Modulo di classe Mage_CatalogSearch_Block_Advanced_Form
public function getDateInput($attribute, $part = 'from')
{
$name = $attribute->getAttributeCode() . '[' . $part . ']';
$value = $this->getAttributeValue($attribute, $part);
return $this->_getDateBlock()
->setName($name)
->setId($attribute->getAttributeCode() . ($part == 'from' ? '' : '_' . $part))
->setTitle($this->getAttributeLabel($attribute))
->setValue($value)
->setImage($this->getSkinUrl('images/calendar.gif'))
->setFormat('%m/%d/%y') //So you need change the Format here !!!!!
->setClass('input-text')
->getHtml();
}
Quindi è necessario modificare il formato di data per il calendario in linea ->setFormat('%m/%d/%y')
! Prendere un'occhiata circa il datetime formato supportato qui http://www.dynarch.com/jscal/#sec34
Poi sua utilizzato nel metodo seguito per generare il blocco
$block = $this->getLayout()->createBlock('core/html_date');
$this->setData('_select_block', $block);
e in quella classe blocco Mage_Core_Block_Html_Date
Line 40: $displayFormat = Varien_Date::convertZendToStrFtime($this->getFormat(), true, (bool)$this->getTime());
.......
Line53: ifFormat : "' . $displayFormat . '",
Fase 2: -
Nella avanzata Mage_CatalogSearch_Model_Resource_Advanced_Collection
di ricerca Class Collection
È necessario modificare questo metodo per consentire al nuovo locale o il nuovo formato DataTime avevi bisogno!
Line43: public function addFieldsToFilter($fields) {
.......
.......
.......
.......
Line96: if (!Zend_Date::isDate($conditionValue['from'])) {
.......
Line109:if (!Zend_Date::isDate($conditionValue['to'])) {
.......
}
Ora è necessario modificare quei 2 linee con il nuovo formato datetime si modifica il blocco di ricerca per permettere questo metodo per essere convalidato
Per esempio ho modificato il formato del calendario Javascript per essere % d-% m-% Y che produrrà data nel calendario come ( 25-12-2014 )
Poi ho modificato il metodo nella classe di raccolta di cui sopra per essere come questo
if (!Zend_Date::isDate($conditionValue['from'], 'd-m-Y' )) { // I added the format for the validation
.......
.......
if (!Zend_Date::isDate($conditionValue['to'], 'd-m-Y' )) { // same as above one
Fase 3: -
Cambia quelli valore degli ingressi di data nella classe Mage_CatalogSearch_Model_Resource_Advanced_Collection
a qualsiasi formato o locale.
Tutto funziona bene con quello.
ho fatto piccolo modulo che riscrivere le 2 classi è necessario modificare in base alle impostazioni internazionali è necessario
Check it out https://github.com/Meabed/magento-advanced -search-datetime-campo
Saluti!
Altri suggerimenti
Hai provato swithcing locale in Sistema> Configurazione> modificare l'ambito alla visualizzazione negozio> Generale> Generale> Opzioni Locale, invece di scrittura nei file di base (che è una cattiva pratica). Si potrebbe risolvere la prima parte del problema.
Per quanto riguarda l'altro problema, si potrebbe desiderare di dare un'occhiata al JS file come calendar.js