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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top