Лишние нули в начале параметра "Вес" (Minishop2)

Здравствуйте, дорогие разработчики на Modx Revo. Вопрос касается minishop2. Отличное дополнение, все понятно и ясно. Спасибо большое Василию за разработку (и не только minishop2).
У меня вопрос такой: как сделать так, что бы в параметре «Номер» сохранялось и выводилось число 001 или 025, ну то есть с нулями впереди?
P.S. «Номер» — это бывший «Вес» (weight)




Вопрос может быть глупый и легко решаемый, но я почему то впал в ступор :) Исправил уже в базе данных Type на textfield, поковырялся в исходниках, но ничего не помогает.
Эрадж Шамс
07 июня 2015, 14:27
modx.pro
1 237
0

Комментарии: 11

Василий Наумкин
07 июня 2015, 17:51
0
Кроме базы нужно еще и модель компонента менять, и тип поля ввода — но это неправильный путь.

Зачем вообще вес тебе нужен с ведущими нулями? Вес — это же число, а не текст.
    Эрадж Шамс
    07 июня 2015, 17:54
    0
    Спасибо за ответ, Василий. Так я же переделал «Вес» в «Номер», а номер мне нужен формата «001»
      Василий Наумкин
      07 июня 2015, 17:55
      0
      Зачем так извращаться?

      Можно использовать артикул, можно добавить новое поле.
        Эрадж Шамс
        07 июня 2015, 17:59
        0
        В том то дело, что «Артикул» у меня уже есть.
        Хотелось чтобы в этом блоке было 4 параметра: Цена, Артикул, Номер и Объем.
        Я пытался создать свои tv-параметры, но никак не мог запихнуть их в этот блок, вот и пошел по пути переименования Веса в Номер и Старой цены в Объем.
        Объем у меня как раз формата типа 10.00, а вот Номер нужен формата 001

        Я извращаюсь, наверняка, из-за того, что чего-то не знаю :((
Николай
07 июня 2015, 21:24
0
А в чем проблема, написать простейший сниппет, который будет формировать нужное число?
while(strlen($digit) < $width)
      $digit = '0' . $digit;
      return $digit;
Тогда в чанке\шаблоне нужно будет не [[+weight]] а [[!snippet? &digit=`[[+weight]]` &width=`3`]]
Где 3 — кол во нулей, необходимых перед числом. Все.
    Максим Кузнецов
    07 июня 2015, 21:57
    0
    Наверное, лучше вывести это в плагин на событие OnDocFormSave, чтобы не нагружать вызов.

    Как-то в духе:

    if ($modx->event->name == 'OnDocFormSave') {
    	if($resource->get('class_key') == 'msProduct'){
    		$tv_value = $resource->getTVValue('tv_name'); //заменить tv_name на название тв-поля/параметра товара
    
    		//кол-во необходимых нулей
    		if (strlen($tv_value) < 3) {
          			$newTvValue = = '0' . $tv_value;
    			$resource->set('tv_name', $newTvValue);
    		}
    
    		$resource->save();
    	}
    }
      Эрадж Шамс
      08 июня 2015, 11:06
      +1
      Спасибо большое, но думаю лучше все сделать по нормальному) просто добавить в этот блок новый параметр :)
        Максим Кузнецов
        08 июня 2015, 12:52
        0
        Дело ваше..)

        Но, к слову, наличие полноценных и подписанных доп.ячеек никогда не было гарантом того, что манагеры/контенщики будут заполнять их правильно..)
          Эрадж Шамс
          08 июня 2015, 12:54
          0
          Знаю, знаю, поэтому и хочу чтобы было максимально понятно и достаточно ограниченно) новый параметр сделаю чисто числовой.
          Спасибо Вам за ответ.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    11