Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
10 марта 2017, 00:35
1
0
Может кому-то понадобиться опишу решение задачи. Мне понадобилось два дня чтоб пробраться через все баги.
Сверстаный html макет сертификата в mpdf выгружался криво. Одна страница растягивалась на 3 страницы. Не подгружались фоновые картинки. В итоге решили сертификаты делать картинками, а на них уже накладывать номер и код сертификата.
Во первых нужен сам mpdf. Он ставиться через composer. Но ставить через composer так не разобрался как. Поступил проще установил компонент PDFresource. В нем уже есть последняя настроенная версия mpdf.
Итоговый сниппет html2pdf:
<?php
require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/core/components/pdfresource/vendor/mpdf/mpdf/mpdf.php'); // путь до mpdf
$mpdf = new mPDF(); 
$mpdf->list_indent_first_level = 0;
$mpdf->SetDisplayMode('fullpage');
switch($_GET['product']){
    case '218':
        $img='http://mysite.ru/assets/components/html2pdf/sertifikat-lichniy-vrach-plus.jpg';
        break;
    case '219':
        $img='http://mysite.ru/assets/components/html2pdf/sertifikat-lichniy-vrach-semeynoe-zdorovye.jpg';
        break;
    case '217': default:
        $img='http://mysite.ru/assets/components/html2pdf/sertifikat-lichniy-vrach-standart.jpg';
        break;
}
$t=$modx->getChunk('sertifikat_html',array(
    'img'=>$img,
    'nomer'=>$_GET['nomer'],
    'code'=>$_GET['code'],
    ));
//return $t;
$mpdf->WriteHTML($t, 0); /*формируем pdf. С ключом 0 обрабатывает стили css.*/
$mpdf->Output('mpdf11.pdf', 'I'); // вывод pdf в браузер. С ключом 'D' выводит файл на загрузку.
exit; // без этой команды в браузер выпадают ероглифы
Итоговый чанк sertifikat_html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="ru">
<head>
	<meta charset="utf-8">
</head>

<body>
<div class="example2">
    
    <img src="[[+img]]"  >
    <div style="margin-top: -895px;padding-left:80px;"><span>[[+nomer]]</span></div>
    <div style="margin-top: -20px;padding-left:470px;"><span>[[+code]]</span></div>
</div>
</body>
</html>
В mpdf стили position:absolute обрабатываются ограниченно. Пришлось долго возиться, чтобы наложить текст на картинку. Решилось все стилем margin-top с отрицательными значениями. Причем те же стили примененные к span эффекта не давали. Только div выручил.
Сейчас все наконец-то работает :)
Александр Туниеков
09 марта 2017, 19:55
0
Только чтоб его поставить нужен vds
Александр Туниеков
09 марта 2017, 19:55
0
Извиняюсь. Протупил. В итоге решили сделать картинки сертификатов и накладывать на них текст. И потом уже выгружать в пдф. Картинку mpdf выгружает. Осталось только разобраться ка наложить текст.
Александр Туниеков
26 января 2017, 15:14
0
А 2000 не дешево? может 3000р?
Александр Туниеков
26 января 2017, 15:04
0
Таблицу в админке или на фронте выводить?
Александр Туниеков
26 января 2017, 12:00
0
Готов взяться! Цена 4000р срок 4 дня. Скайп touols
Александр Туниеков
17 декабря 2016, 02:52
0
Не знаю вроде не помогает, но через полчаса все проходит и ставиться нормально.
Александр Туниеков
13 декабря 2016, 16:40
0
Не знаю. У меня без api ничего не работало.
Александр Туниеков
27 ноября 2016, 03:08
0
Можно поподробней какой баланс? и что за статистика?
Александр Туниеков
23 ноября 2016, 00:22
0
Сделал все проще чем казалось. Удаляю товары кликая по кнопке удаления товаров:
$('.false_product').first().find('.buttonremove').trigger('click');
Александр Туниеков
22 ноября 2016, 03:38
0
А корзина и интернет магазин не нужен? или нужен?
Александр Туниеков
11 ноября 2016, 10:27
0
Обычно делается не добавление к цене а скидка вроде :).
Сделаю скайп touols
Александр Туниеков
13 октября 2016, 22:16
0
Заработало. Я пытался править modx.class.php из админки. Как подсказал Володя его надо было залить по ftp.
И в плагине правки:
<?php
switch ($modx->event->name) {

	case 'msOnGetProductPrice':
		if ($modx->context->key == 'mgr') {return;}
		// Плагин принимает:
		// $product - объект msProductData
		// $data - массив со свойствами товара, может отсутствовать
		// $price - текущая цена товара

		// Подключаем массив значений по ссылке - так удобнее
		$values = & $modx->Event->returnedValues;
        $values2 = & $modx->event->returnedValues;
...
		
		$price = $price*$course;
		$values['price'] = round($price, 0);
		$values2['price'] = $values['price'];
...
		break;
}
Александр Туниеков
12 октября 2016, 18:47
0
Поясните пожалуйста.
поставили php5.3 та же проблема :(
Александр Туниеков
12 октября 2016, 18:26
0
фикс можно вот такой сделать github.com/modxcms/revolution/pull/13116
Не работает
// Подключаем массив значений по ссылке - так удобнее
		$values = $modx->event->returnedValues;

		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
		if (isset($values['price'])) {
			$price = $values['price'];
		}
		$modx->log(MODX::LOG_LEVEL_ERROR,'Плагин price_currency '.print_r($values,true));
print_r($values,true) все равно пустое :(
Александр Туниеков
12 октября 2016, 18:04
0
Спасибо посмотрю. еще один вопрос можно?
Есть плагин который в корзине меняет цену в зависимости от кол-ва. (блин плагин выше валюту переводит. поторопился когда писал.)
<?php
switch ($modx->event->name) {
	case 'msOnAddToCart': case 'msOnChangeInCart': case 'msOnRemoveFromCart':

		$cartArray = $cart->get();
		$cartStatus = $cart->status();
		$totalCount = $cartStatus['total_count'];
        //получаем курс валюты
....
        		$price = $product->get('price')*$course;
        		$old_price = round($product->get('old_price')*$course, 0);
        		//получаем скидку товара
....
		$cart->set($cartArray);
		break;

}
Как в этой строке
$price = $product->get('price')*$course;
можно получить цену модифицированную msOptionsPrice2?
Александр Туниеков
12 октября 2016, 17:07
0
Помогите плиз. На событие msOnGetProductPrice стоит 2 плагина. Первым отрабатывает плагин msoptionsprice вторым вызывается плагин для изменения цены от кол-ва товаров.
switch ($modx->event->name) {

	case 'msOnGetProductPrice':
		if ($modx->context->key == 'mgr') {return;}
		// Плагин принимает:
		// $product - объект msProductData
		// $data - массив со свойствами товара, может отсутствовать
		// $price - текущая цена товара

		// Подключаем массив значений по ссылке - так удобнее
		$values = &$modx->event->returnedValues;

		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
		if (isset($values['price'])) {
			$price = $values['price'];
		}
		$modx->log(MODX::LOG_LEVEL_ERROR,'Плагин price_currency '.print_r($values,true));
$values
приходит пустое. То есть изменение цены от первого плагины не приходит.
Почему это происходит и как вылечить?
Александр Туниеков
23 сентября 2016, 00:31
0
Написал специально тестовый сниппет и все заработало. Разобрался в чем косяк :). Я в форме вызывал плейсхолдер с модификатором раньше, чем сниппет который выставляет плейсхолдер.
[[$search_form]]
[[!+topic_bar_cat]]
[[!+topic_bar_cat:is=`1`:then=`true`:else=`false`]]
[[!pdoPage?
	&element=`mSearch2`
	&limit=`10`
	&where=`[[!get_search_where?]]`
	&includeTVs=`topic_bar_cat,topic_price,topic_torg,topic_sity`
	&tpl=`My.tpl.mSearch2.row`
]]

<div class="pagination">
	[[!+page.nav]]
</div>
Плейсхолдер выставляет
[[!get_search_where?]]
.

Наверно парсер MODX обрабатывает плейсхолдер с модификатором раньше, чем выставляется сам плейсхолдер.