Скрыть время в транзакционных письмах с помощью {{var order.getCreatedAtFormated ('' short '')}}

У меня небольшая проблема. Я хочу показывать дату без времени в моих почтовых рассылках.

Для этого я должен использовать {{var order.getCreatedAtFormated(''short'')}} afaik. Но он все еще показывает время. Конечно, я искал источник Magento, и мне интересно, почему он не работает.

Когда я смотрю в app/code/core/Mage/Sales/Model/Order.php я могу найти, что:

 /** * Get formated order created date in store timezone * * @param string $format date format type (short|medium|long|full) * @return string */ public function getCreatedAtFormated($format) { return Mage::helper('core')->formatDate($this->getCreatedAtStoreDate(), $format, true); } 

Если посмотреть дальше в /app/code/core/Mage/Core/Helper/Data.php это:

 public function formatDate($date = null, $format = Mage_Core_Model_Locale::FORMAT_TYPE_SHORT, $showTime = false) { if (!in_array($format, $this->_allowedFormats, true)) { return $date; } if (!($date instanceof Zend_Date) && $date && !strtotime($date)) { return ''; } if (is_null($date)) { $date = Mage::app()->getLocale()->date(Mage::getSingleton('core/date')->gmtTimestamp(), null, null); } else if (!$date instanceof Zend_Date) { $date = Mage::app()->getLocale()->date(strtotime($date), null, null); } if ($showTime) { $format = Mage::app()->getLocale()->getDateTimeFormat($format); } else { $format = Mage::app()->getLocale()->getDateFormat($format); } return $date->toString($format); } 

Значит, он не должен скрывать время, когда я передаю короткий аргумент этой функции?

Mage::helper('core')->formatDate(null, Mage_Core_Model_Locale::FORMAT_TYPE_SHORT, false);

Последний параметр позволяет скрывать время:

 public function formatDate($date = null, $format = Mage_Core_Model_Locale::FORMAT_TYPE_SHORT, $showTime = false) 

Это очень раздражает Magento, чтобы предоставить оболочку методу, но не обеспечить полный доступ. Почему они не написали метод вроде следующего, я не знаю …

 public function getCreatedAtFormated($format, $showTime = true) { return Mage::helper('core')->formatDate($this->getCreatedAtStoreDate(), $format, $showTime); } 

Вы должны переопределить /app/code/local/Mage/Sales/Model/Order.php, создать новую функцию

 public function getCreatedAtFormatedHideTime($format) { return Mage::helper('core')->formatDate($this->getCreatedAtStoreDate(), $format, false); } 

Поэтому вы можете вызвать его из почтового шаблона:

 {{var order.getCreatedAtFormatedHideTime('short')}} 

Вывод:

01/01/2000