Наумов Алексей

Наумов Алексей

С нами с 31 марта 2013; Место в рейтинге пользователей: #13
Наумов Алексей
22 марта 2014, 19:15
0
Я понимаю, что с точки зрения программиста, Василий, ты все верно говоришь. Но с токи зрения простого покупателя обязательный enail — серьезная преграда. И я как создатель магазинов уже 3-й раз ее обхожу, создавая кастомный клас обработки заказа. И люди часто спрашивают, как отключить его. Наверное это о чем то говорит ;)
Наумов Алексей
22 марта 2014, 09:14
+1
Замолвлю словечко.
неплохая реализация здесь drive2.ru:


Принцип: загружаете файлы, они появляются внизу. У каждого файла есть ссылка «Вставить в текст», вставляет туда, где курсор. в src аттрибуте указывается номер загруженной картинки. Все картинки, что загружены, но не вставлены в текст, появляются внизу поста. Вроде просто, но посты писать на сайте удобно.
Наумов Алексей
22 марта 2014, 08:54
4
0
Привет. Вот смотри:
1. В системной настройке ms2_order_handler_class указываем myOrderHandler
2. Создаем файл core/components/minishop2/custom/order/myOrderHandler.class.php
3. В него код:
<?
class myOrderHandler extends msOrderHandler{	
	public function submit($data = array()) {
		if(empty($data['email'])){
			$data['email'] = uniqid('user_').'@MYSITE.ru';
		}
		return parent::submit($data);
	}
}
Это один из вариантов. Мы просто при отправке заказа, если пользователь не указал почту, генерируем случайный email.

Можешь посмотреть исходный msOrderHandler и переопределить в нем другой метод, например, где идет проверка email.
Наумов Алексей
18 марта 2014, 09:37
0
Я тоже ставил свежую версию Gallery, причем поверх старой. Она вообще с проблемами встала и была не работоспособна.
Наумов Алексей
07 марта 2014, 11:14
0
Дело в том, что если к избранным — то стандартным методом никак.

Нет, вы можете конечно настроить нужные размеры картинок, а затем через FTP просто заменить сгенерированные маленькие картинки своими — но при перегенерации они перезатрутся.

Я добавил TV «custom_photo», куда руками в случае необходимости подгружал бы фото.

При отображении учитывал бы, есть это фото или нет. Но это много работы писать, свои сниппеты, сложно в общем.
Наумов Алексей
07 марта 2014, 10:16
0
Вот мой, разница в 2 раза с вами, многовато…
Хостинг за 30$.

--------------------------------------
test_math                 : 7.473 sec.
test_stringmanipulation   : 3.268 sec.
test_loops                : 1.833 sec.
test_ifelse               : 1.729 sec.
--------------------------------------
Total time:               : 14.303 sec.
Наумов Алексей
06 марта 2014, 17:07
0
Если из картинки нужно вырезать всегда определенное место, например верх, то вроде можно использовать zc=X, где x = TL,TR,BL,B,T ну и т.д.

А если каждый раз вручную, то наверное проще завести отдельное TV поле для такой картинки…
Наумов Алексей
06 марта 2014, 16:56
0
У вас, кстати, и не очень то очевидна разница.., разброс не более 20%, хотя цена хостинга разнится в разы.
Наумов Алексей
06 марта 2014, 16:55
0
А я в общем мигрировал только что на тариф за 30$ и время стало:
0.18557000160217 (но периодически 0,25-0,3, видимо в этот момент другие сайты работают)

а было, напоминаю
20$: 0.2700000000000

разница налицо.
Наумов Алексей
06 марта 2014, 16:34
0
Да, вот тоже подумываю уйти на 30$ или 40$. Видимо так и сделаю.
Наумов Алексей
06 марта 2014, 16:23
0
Василий, а тариф у тебя какой? за 40$?
Наумов Алексей
04 марта 2014, 14:42
0
Хм… у меня возможно старая версия минишоп.

Тогда я бы сделал так:
Через этот механизм bezumkin.ru/modx/minishop2/classes/910/ добавил колонку к товару price_rur.

И раз в день пересчитывал бы ее. Т.е. фактически оставил бы пункты 3,4,5 и из 4 убрал бы сохранение в настройки курса.

Т.е. у нас 2 поля для цены у товара. Одна для USD, заполняется менеджером, другая для RUR, пересчитывается полностью автоматически.
Наумов Алексей
04 марта 2014, 10:29
0
А, ну и еще у меня у товара добавлена колонка
price_rur, в ней я храню цену товара в рублях,

вот этот код из сниппета updateRates пересчитывает эту цену:

// обновляем колонку price_rur
$sql1 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$euro)." * `price` WHERE `price` > 0";
$sql2 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$usd)." * `old_price` WHERE `old_price` > 0";

$q = $modx->prepare($sql1);
$q->execute();
$q = $modx->prepare($sql2);
$q->execute();
Наумов Алексей
04 марта 2014, 10:26
2
0
Ох…
1. Система-Настройки системы: ключ ms2_price_snippet, указываем значение modifyPrice
2. Делаем сниппет modifyPrice:
ну у меня тут несколько другая ситуация, цены на товары вбиты в поля price — в евро, в old_price — в долларах.
<?php
$priceEURO = $product->get('price');
$priceUSD = $product->get('old_price');

$rateEURO = $modx->getOption('rate_euro');
$rateUSD = $modx->getOption('rate_usd');

if($priceEURO > 0){
  return $priceEURO * $rateEURO;
}
if($priceUSD > 0){
  return $priceUSD * $rateUSD;
}
return 0;
3. Создаем ресурс, публикуем его, скрываем из меню, добавляем ему в контент:

[[!updateRates]]
и этот ресурс на хостинге вешаем по его url на кронтаб раз в сутки.

4. Создаем сниппет updateRates:

require_once($modx->getOption('assets_path').'components/cbrf/ExchangeRatesCBRF.class.php');
$rates = new ExchangeRatesCBRF();

$usd = $rates->GetRate("USD");
$euro = $rates->GetRate("EUR");

$setting = $modx->getObject('modSystemSetting', 'rate_euro');
$setting->set('value', $euro);
$setting->save();

$setting = $modx->getObject('modSystemSetting', 'rate_usd');
$setting->set('value', $usd);
$setting->save();

// обновляем колонку price_rur
$sql1 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$euro)." * `price` WHERE `price` > 0";
$sql2 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$usd)." * `old_price` WHERE `old_price` > 0";

$q = $modx->prepare($sql1);
$q->execute();
$q = $modx->prepare($sql2);
$q->execute();

//$cacheRefreshOptions =  array( 'system_settings' => array() );
//$modx->cacheManager->refresh($cacheRefreshOptions);
$modx->cacheManager->refresh();

echo 'Курс USD: '.$usd;
echo '<br />';
echo 'Курс EURO: '.$euro;
Я в этом сниппете еще кеш чищу в конце всего сайта, мне так нужно.

5. Создаем файл components/cbrf/ExchangeRatesCBRF.class.php:

<?php
class ExchangeRatesCBRF
{
	var $rates;
	function __construct($date = null)
	//В PHP версии ниже 5 это метод объекта следует переименовать в ExchangeRatesCBRF
	{
		$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); 
		if (!isset($date)) $date = date("Y-m-d"); 
		$curs = $client->GetCursOnDate(array("On_date" => $date));
		$this->rates = new SimpleXMLElement($curs->GetCursOnDateResult->any);
	}

	function GetRate ($code)
	{
	//Этот метод получает в качестве параметра цифровой или буквенный код валюты и возвращает ее курс
		$code1 = (int)$code;
		if ($code1!=0) 
		{
			$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/Vcode[.='.$code.']/parent::*');
		}
		else
		{
			$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/VchCode[.="'.$code.'"]/parent::*');
		}
		if (!$result)
		{
			return false; 
		}
		else 
		{
			$vc = (float)$result[0]->Vcurs;
			$vn = (int)$result[0]->Vnom;
			return ($vc/$vn);
		}

	}
}
6. Создаем 2 системные настройки:
rate_euro
rate_usd

7. Открываем первый раз ресурс с шага 3 и проверяем, что он сработал и в настройках курсы обновились.

Это мое решение с одного из сайтов, успешно работающее.
Наумов Алексей
03 марта 2014, 16:33
0
1. Создаете сниппет, в котором получаете курс валют на сегодня и сохраняете его в системные настройки MODx.
2. Этот сниппет вызываете по crontab раз в сутки, ведь курс меняется раз в сутки
3. Выводите цену с учетом этого курса. В miniShop2 есть специальная настройка в параметрах, позволяющая указать свой сниппет для обработки товара (точно не помню, но она есть, посмотрите). В этом сниппете цену и считаете с учетом курса.
Наумов Алексей
20 декабря 2013, 10:08
0
Может я логику не очень хорошо описал, попробую еще раз:
minishop2-combo-options полностью устраивает и делает то, что надо.

Но многие товары переносятся с каталогов и там возможные значения 'этого поля даны строкой с разделителем (запятые или слеш), их много и руками по одному вставлять неудобно. Нужно импортировать их в это поле из строки…

или вариант 2:
если мы в плагине на OnDocFormSave меняем поле textfield, то после сохранения оно в админке обновляется, а вот minishop2-combo-options не обновляется, подозреваю, что просто это не дописано =) MODx в ответе на POST запрос после сохранения документа новое значение поля присылает, а minishop2-combo-options на это не реагирует.
Наумов Алексей
20 августа 2013, 11:33
0
Я в целом согласен, что товар — это конечный элемент. Но уже на втором сайте получается так, что minishop используется не для магазина, а как структурированный каталог всевозможных элементов с удобной админкой. И вот получается так, что хорошо бы сделать вложенные ресурсы у товара :) Буду пробовать. Спасибо.