Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #2
Павел Гвоздь
08 декабря 2015, 22:16
+3
Зачем читать топик? Из названия уже понятно.
Ха-ха-ха. =D

А фильмы ты тоже так смотришь?))) Книги читаешь также?))))
Павел Гвоздь
08 декабря 2015, 20:06
+2
Тоже жду! Спасибо, Николай! Изящный компонент, в плане реализации. Вот сижу — изучаю. Рад, что есть исходники папки _build. Во многом отличается от заготовки Василия — modExtra. Интересно сравнить одно с другим.
Павел Гвоздь
04 декабря 2015, 19:54
0
У всех свои предпочтения. =D
Павел Гвоздь
04 декабря 2015, 13:00
+2
индустрия CEO, гребущая немалые деньги — сплошное надувательство
Оптимизация оптимизации рознь. Есть «методы» продвижения от обманщиков для лохов несведущих людей в этой теме, о которой сказано в процитированном мной заявлении выше, в которую входит продвижение ссылками (в наше время), указание простыни ключевых слов на странице и подобные сказки. А есть рабочие методы, вроде юзабилити причёсывания сайта для большего удобства пользователя, качественная проработка текста (это когда текст грамотно структурирован и разбит подзаголовками, лучше всего без воды), внедрения на сайт удобных функций (вроде калькулятора) и т.д.

Если чего-то не понимаешь — не нужно категорично заявлять, что этого нет или что это не работает. Это повседневная проблема нашего человека. То, что однажды ваш сайт попал в ТОП и продержался там недельку по НЧ (утрирую), не значит, что минимально указав какие-то моменты и проставив на него кучу ссылок с ГС у вас получилось продвинуть его не прибегая к услугам т.н. «профи в СЕО». Обычно даже если сайт в ТОП-3 по ВЧ — это не значит, что у него куча ссылок на морду или даже юзабилити удобство для пользователя проработано на высшем уровне. Просто на нём есть, к примеру, очень удобная функция калькулятора для подсчёта цены на пластиковое окно или ещё что-то в этом духе. Надо понимать, что тот-же Яндекс в наше время умеет оценивать удобство сайтов по поведению пользователей на них (да, вы не поверите, но технологии в наше время доросли до такого уровня). Однако это не говорит о том, что это самый главный и важный фактор. Есть такие маленькие китайцы люди, их называют асессорами (вы и сами можете попробовать себя в этом деле), так вот они оценивают множество различных факторов на сайте вручную. И часто бывает так, что от их оценки зависит ТОП-3 какого-либо ВЧ.

Ещё раз повторю. Если чего-то не понимаешь — не нужно категорично заявлять, что этого нет или что это не работает.
Павел Гвоздь
04 декабря 2015, 12:42
+1
Переименуйте, пожалуйста, заголовок топика. Слишком уж он заманушный, да ещё и не в тему…
Павел Гвоздь
02 декабря 2015, 18:20
0
Помоему в мускуле есть ограничения на кол-во полей определённого типа. Или это дело настроить где можно?
Павел Гвоздь
02 декабря 2015, 13:22
1
+1
У тебя помоему тут в таблице ТВшек хранится лишняя информация? В статье от Николая с подобной штукой был плагин, который удаляет лишнюю инфу из таблицы с ТВхами. Я его немного переписал. Вот, если кому надо:
<?php
/*
	OnBeforeDocFormSave
	OnDocFormSave
	OnResourceTVFormRender
*/

$tvs = array(
	2	=> "image",
	3	=> "city",
	4	=> "company",
	5	=> "email",
);

switch($modx->event->name)
{
	/* >> Рендеринг ТВшек */
	case 'OnResourceTVFormRender':
		
		if( !$document = $modx->getObject('modResource', $resource) )
		{
			$modx->log(xPDO::LOG_LEVEL_ERROR, "Не был получен документ");
			return;
		}
		
		$categories = & $scriptProperties['categories'];
		
		foreach( $categories as $c_id => & $category )
		{
			foreach( $category['tvs'] as & $tv )
			{
				if( array_key_exists($tv->id, $tvs) )
				{
					$q = $modx->newQuery('modTemplateVar');
					$q->select( 'type' );
					$q->where( 'name = "'. $tvs[ $tv->id ] .'"' );
					$tv_type = $modx->getValue( $q->prepare() );
					unset($q);
					
					// >> Рендеринг тэгов
					if( $tv_type == 'tags' )
					{
						$q = $modx->newQuery('modResourceTag');
						$q->select(array(
							"GROUP_CONCAT(distinct tag_id) as tags",
						));
						$q->where(array(
							"resource_id" => $document->id,
						));
						$tags = $modx->getValue($q->prepare());
						$value = str_replace(",", "||", $tags);
						$tv->value = $value;
						$tv->relativeValue = $value;
						$inputForm = $tv->renderInput($document, array('value' => $tv->value));
						$tv->set('formElement', $inputForm);
					}
					// << Рендеринг тэгов
					
					
					// >> Рендеринг строковых ТВшек
					else if(
							$tv_type == 'autotag' ||
							$tv_type == 'tag' ||
							$tv_type == 'image' ||
							$tv_type == 'email' ||
							$tv_type == 'date' ||
							$tv_type == 'option' ||
							$tv_type == 'listbox-multiple' ||
							$tv_type == 'listbox' ||
							$tv_type == 'resourcelist' ||
							$tv_type == 'hidden' ||
							$tv_type == 'text' ||
							$tv_type == 'textarea' ||
							$tv_type == 'richtext' ||
							$tv_type == 'list-multiple-legacy' ||
							$tv_type == 'file' ||
							$tv_type == 'checkbox' ||
							$tv_type == 'number' ||
							$tv_type == 'migx'
					) {
						$tv->value = $document->$tvs[ $tv->id ];
						$tv->relativeValue = $tv->value;
						$inputForm = $tv->renderInput($document, array('value'=> $tv->value));
						$tv->set('formElement', $inputForm);
					}
					// << Рендеринг строковых ТВшек
					
					
					// >> Рендеринг массивных ТВшек
					else if(
							$tv_type == 'listbox-multiple'
					) {
						$tv_value_array = array_map( function($v){ return trim($v,':'); }, explode( '::', $document->$tvs[ $tv->id ] ) );
						$tv->value = $tv_value_array;
						$tv->relativeValue = $tv_value_array;
						$inputForm = $tv->renderInput($document, array('value' => $tv->value));
						$tv->set('formElement', $inputForm);
					}
					// << Рендеринг массивных ТВшек
				}
			}
		}
		
	break;
	/* << Рендеринг ТВшек */
	
	
	/* >> Перед сохранением документа */
	case 'OnBeforeDocFormSave':
		
		if( !$resource = & $scriptProperties['resource'] )
		{
			$modx->log(xPDO::LOG_LEVEL_ERROR, "Не был получен документ");
			return;
		}
		
		// >> получим список id ТВшек, с которыми будем работать
		$i=0;
		$tv_where='';
		foreach( $tvs as $id => $name )
		{
			$tv_where .= !$i ? '' : ' OR ';
			$tv_where .= 'name = "'. $name .'"';
			$i++;
		}
		unset($i); unset($id); unset($name);
		
		$q = $modx->newQuery('modTemplateVar');
		$q->select( 'id, type, name' );
		$q->where( $tv_where );
		$s = $q->prepare();
		$s->execute();
		$tv_rows = $s->fetchAll(PDO::FETCH_ASSOC);
		unset($q); unset($s);
		// << получим список id ТВшек, с которыми будем работать
		
		
		// >> Обрабатываем ТВшки
		foreach( $tv_rows as $tv_row )
		{
			$var = 'tv'. $tv_row['id'];
			
			if( isset( $resource->$var ) )
			{
				// >> теги
				if( $tv_row['type'] == 'tags' )
				{
					$tags = array();
					foreach( (array)$resource->Tags as $tag )
					{
						$tag->active = 0;
						$tags[ $tag->tag_id ] = $tag;
					}
					
					if( !empty($resource->$var) )
					{
						foreach( (array)$resource->$var as $tv_value )
						{
							if( $tv_value )
							{
								if( !empty($tags[ $tv_value ]) )
								{
									$tags[ $tv_value ]->active = 1;
								}
								else {
									$tags[ $tv_value ] = $modx->newObject('modResourceTag', array(
										"tag_id" => $tv_value,
									));
								}
							}
						}
					}
					
					$resource->Tags = $tags;
					
					$tags_ids = array();
					foreach( $resource->Tags as $tag )
					{
						if( $tag->active )
						{
							$tags_ids[] = $tag->tag_id;
						}
					}
					
					$resource->$tv_row['name'] = ( $tags_ids ? implode(",", $tags_ids) : NULL );
				}
				// << теги
				
				
				// >> картинки и другие строковые
				else if($tv_row['type'] == 'autotag' ||
						$tv_row['type'] == 'tag' ||
						$tv_row['type'] == 'image' ||
						$tv_row['type'] == 'email' ||
						$tv_row['type'] == 'date' ||
						$tv_row['type'] == 'option' ||
						$tv_row['type'] == 'listbox' ||
						$tv_row['type'] == 'resourcelist' ||
						$tv_row['type'] == 'hidden' ||
						$tv_row['type'] == 'text' ||
						$tv_row['type'] == 'textarea' ||
						$tv_row['type'] == 'richtext' ||
						$tv_row['type'] == 'file' ||
						$tv_row['type'] == 'number' ||
						$tv_row['type'] == 'migx'
				) {
					//print_r( $resource->$var );
					
					$resource->$tv_row['name'] = $resource->$var;
				}
				// << картинки и другие строковые
				
				
				// >> массивы
				else if($tv_row['type'] == 'listbox-multiple' ||
						$tv_row['type'] == 'list-multiple-legacy' ||
						$tv_row['type'] == 'checkbox'
				) {
					$resource->$tv_row['name'] = ( $resource->$var ? implode("||", $resource->$var) : NULL );
				}
				// << массивы
			}
		}
		// << Обрабатываем ТВшки
		
	break;
	/* << Перед сохранением документа */
	
	
	/* >> Сохранение документа */
	case 'OnDocFormSave':
		
		if( !$resource = & $scriptProperties['resource'] )
		{
			$modx->log(xPDO::LOG_LEVEL_ERROR, "Не был получен документ");
			return;
		}
		
		if($tvs)
		{
			$modx->removeCollection('modTemplateVarResource', array(
				'tmplvarid:in'	=> array_keys($tvs),
				'contentid'		=> $resource->id,
			));
			
			// Сбрасываем автоинкримент
			//$sql = "ALTER TABLE {$tv_table} auto_increment = 1";
			//$modx->prepare($sql)->execute();
		}
		
	break;
	/* << Сохранение документа */
}

В массиве $tvs инфа о ТВхах в таком виде: id => name.
Павел Гвоздь
02 декабря 2015, 08:52
0
Везде, где инициализируется miniShop2 происходит вставка скриптов и стилей, насколько я понимаю. Если инициализации не происходит — страница будет без них. Видимо у тебя на каждой странице вызывается сниппет из набора miniShop2 или плагин какой срабатывает инициализируя пакет.
Павел Гвоздь
02 декабря 2015, 08:38
-1
Нужно больше подробностей.
Битва экстрасенсов закончилась. Все экстрасенсы разъехались. ;)
Павел Гвоздь
30 ноября 2015, 15:16
0
Наоборот не надо. Мир, Василий! :)
Павел Гвоздь
30 ноября 2015, 14:59
0
Я имел ввиду массив, полученный методом $_modx->getResources впоследствии передать, как параметр в pdoPage и он уже его съест и обработает постранично. Честно говоря не пойму, при чём тут шаблонизатор. А если даже и «при чём», то метод getResources работает с базой, вроде как. Не?
Павел Гвоздь
30 ноября 2015, 14:52
0
Я его и имел ввиду. Пардон, что выразился недостаточно полно.
Значит через pdoPage этот массив уже никак не обработать? Не планируешь добавить в pdoPage обработку подобных массивов в будущем? Было бы круто вообще!
Павел Гвоздь
30 ноября 2015, 14:46
0
Можно еще вот так
Прикольно! А постранично никак такое не сделать?
Павел Гвоздь
28 ноября 2015, 09:56
0
Василий, помоему надо создать раздел «Мелочи для новичков», который не будет публиковать записи на главную сайта?)
Павел Гвоздь
28 ноября 2015, 09:23
0
Перепробывал на мой взгляд все возможные варианты, ничего не даёт нужного результата. Или я не так что-то делаю.
Павел Гвоздь
27 ноября 2015, 23:41
0
Тогда другой вопрос. Планируется ли реализовать привязку к категориям товаров?
Павел Гвоздь
27 ноября 2015, 22:02
0
А в чём преимущество перед стандартными полями реализованными в версии 2.2 (помоему с неё они появились)? Ведь там есть возможность привязывать их к категориям, а тут, как я понял, эти поля будут отображаться для всех товаров без исключения?
Павел Гвоздь
24 ноября 2015, 12:25
0
Ну такие моменты желательно, чтобы заказчику объяснял исполнитель. При чём во всех красках.