Борис И

Борис И

С нами с 20 апреля 2014; Место в рейтинге пользователей: #71
Борис И
22 апреля 2016, 17:27
0
Спасибо, попробую.
Борис И
21 апреля 2016, 20:32
0
На просторах инета нашел плагин
/*
 
cachingResources
 
Кэширует ресурсы по заданным параметрам
 
OnSiteRefresh
 
*/
 
$start_id = $modx->getOption('start_id',$scriptProperties,2);
$depth = $modx->getOption('depth',$scriptProperties,50);
 
$start_resource = $modx->getObject('modResource',$start_id);
if(!$start_resource) return '';
 
$context = $start_resource->get('context_key');
$child_ids = $modx->getChildIds($start_id,$depth,array('context'=>$context));
array_push($child_ids,$start_id);
 
foreach($child_ids as $id){
     
    $url = $modx->makeUrl($id,$context,'','full');
    $content = file_get_contents($url);
     
}
unset($content);
 
return '';
который должен отправлять в кеш из заданной категории, что-то ничего не выходит
Борис И
15 апреля 2016, 20:01
0
Здравствуйте, получилось реализовать или все еще не пригодилось? Задумываюсь, очень нужная штука.
Борис И
13 апреля 2016, 21:22
0
Василий, спасибо!!! Очень полезное дополнение, реально помогает найти слабые места
Борис И
12 апреля 2016, 21:12
0
В продолжение темы. Продолжаю изучение php и попытки оптимизации кода. Теперь сниппет brp такой
Вычитал что str_replace работает быстрее чем preg_replace
$sContent = preg_replace_callback('|(<ul(.+)</ul>)|iU', function($sContent){
	       
            return "</p>".$sContent[0]."<p>";
        	
        }, $sContent);
        
$sContent = preg_replace_callback('|(<ol(.+)</ol>)|iU', function($sContent){
	       
            return "</p>".$sContent[0]."<p>";
        	
        }, $sContent);
                
        
$sContent = preg_replace_callback('|<h([2,3]{1}) id=".">(.+)</h[2,3]{1}>|iU', function($sContent){
	        
        	return "</p>".$sContent[0]."<p>";
        }, $sContent);
        


    $from=array ("</br>","\n","></p><p><","<p>\r</p>","<p>\n</p>","<p></p>"); //слеш перед br не нужен, здесь без него происходит перенос строки
      $to=array ("\n","</p><p>","><","","","");
    $sContent=str_replace($from, $to, $sContent);  
return "<p>".$sContent."</p>";
Будут идеи как оптимизировать, с радостью приму.
Борис И
10 апреля 2016, 07:29
0
Да, спасибо, думал на эту тему.
На сайте уже много статей и пересохранать каждую не очень хочется, может быть есть вариант прогнать все статьи через плагин?
Борис И
09 апреля 2016, 21:44
0
Я сделал так.
Вызов контента
[[brp? &sContent=`[[*content]]`]]
Сниппет brp
$sContent = preg_replace_callback('|(<ul(.+)</ul>)|iU', function($sContent){
	       
            return $sContent[0]."\n";
        	
        }, $sContent);
        
$sContent = preg_replace_callback('|<h([2,3]{1}) id=".">(.+)</h[2,3]{1}>|iU', function($sContent){
	        
        	return $sContent[0]."\n";
        }, $sContent);
        
$sContent = preg_replace('|</br>|isU', '', $sContent);// слеш перед br не нужен, здесь без него происходит перенос строки

$sContent = preg_replace('|\n|isU', '</p><p>', $sContent);
return "<p>".$sContent."</p>";
Принцип действия прост:
добавляем  "\n" после ul и заголовков (h2,h3). Вырезаем все br,  меняем  все \n на </p><p>. В начало добавляем <p>, в конец </p>, так на всякий..
Решение кривое, но работает. Любые улучшения и изменения приветствуются.
Борис И
07 апреля 2016, 20:58
0
Создать TV, прицепить его к категориям и прописывать данному tv — id требуемой позиции BannerY, а выводить [[!BannerY? &position=`[[*наш tv]]`]]. Так должно получиться выводить для необходимой категории свой баннер.
Борис И
03 апреля 2016, 19:42
0
Так пробовал делать, часть функций все равно не работает, как писал выше
Борис И
02 апреля 2016, 17:36
0
Спасибо за помощь, буду понемногу вникать в php+js
Борис И
02 апреля 2016, 12:52
0
Где то еще подключаются скрипты.
Формы отличаются
1. Форма «Содержимое» через ajax
<div class="form-group">
		<textarea class="form-control" placeholder="Содержимое" name="content" id="ticket-editor" rows="10"></textarea>
		<span class="error"></span>
	</div>
2. «Форма Содержимое» стандартное
<div class="form-group">
		<div><div id="markItUpTicket-editor" class="markItUp"><div class="markItUpContainer"><div class="markItUpHeader"><ul><li class="markItUpButton markItUpButton1 btn-bold"><a href="" accesskey="B" title="Выделить жирным [Ctrl+B]">Выделить жирным</a></li><li class="markItUpButton markItUpButton2 btn-italic"><a href="" accesskey="I" title="Курсив [Ctrl+I]">Курсив</a></li><li class="markItUpButton markItUpButton3 btn-underline"><a href="" accesskey="U" title="Подчеркивание [Ctrl+U]">Подчеркивание</a></li><li class="markItUpButton markItUpButton4 btn-stroke"><a href="" accesskey="H" title="Выделение подзаголовков [Ctrl+H]">Выделение подзаголовков</a></li><li class="markItUpSeparator">---------------</li><li class="markItUpButton markItUpButton5 btn-bulleted"><a href="" title="Ненумерованный список">Ненумерованный список</a></li><li class="markItUpButton markItUpButton6 btn-numeric"><a href="" title="Нумерованный список">Нумерованный список</a></li><li class="markItUpSeparator">---------------</li><li class="markItUpButton markItUpButton7 btn-quote"><a href="" title="Цитата">Цитата</a></li><li class="markItUpButton markItUpButton8 btn-link"><a href="" title="Link">Link</a></li><li class="markItUpButton markItUpButton9 btn-picture"><a href="" title="Картинка">Картинка</a></li></ul></div><textarea class="form-control markItUpEditor" placeholder="Содержимое" name="content" id="ticket-editor" rows="10"></textarea><div class="markItUpFooter"><div class="markItUpResizeHandle"></div></div></div></div></div>
		<span class="error"></span>
	</div>
Но даже если все это добавить в форму выводимую через ajax, кнопки появляются, но не работают. Где-то внутри еще есть подключение скриптов.
Я защел в тупик, куда копать дальше
Борис И
02 апреля 2016, 12:25
0
Все переделал еще раз и часть функций, при наличии стандартного сниппета [[!TicketForm?]] на странице, заработало, а вот добавление файлов нет и элементы форматирования текста: B,I… не появились.
Борис И
02 апреля 2016, 11:41
0
Попробовал подключить вручную, ситуация не изменилась.
Подумал, что что-то пропустил и вывел на эту же страницу [[!TicketForm?]] для подключения скриптов, ситуация не изменилась. Стандартная форма работает, форма через ajax нет. Еще обратил внимание, что у формы через ajax нет (не выведены) элементов форматирования текста: B,I…
Борис И
02 апреля 2016, 11:07
0
При этом если на этой же странице вывести форму обычно
[[!TicketForm? 
&requiredFields=`longtitle,model,introtext` 
&allowedFields=`longtitle,fullname,model,introtext,avtor,video,yaobzor` 
&redirectUnpublished=`63` 
&parents=`0` 
&tplFormCreate=`tpl.Tickets.form.create1` ]]
то данная форма работает.
Форма выведенная через ajax не работает
Борис И
02 апреля 2016, 11:00
0
Вызов стал таким
$params = array();
$params['requiredFields'] = 'longtitle,model,introtext';
$params['parents'] = $action1;
$params['allowedFields'] = 'longtitle,fullname,model,introtext,avtor,video,yaobzor';
$params['redirectUnpublished'] = '63';
$params['tplFormCreate'] = 'tpl.Tickets.form.create1';

$res = $modx->runSnippet('TicketForm', $params);
Спасибо страница перестала дублироваться, но обратил внимание на другую проблему.

Форма TicketForm не работает, ничего не отправляет, не добавляет фото (при клике ничего не происходит), рядом с «Выберите файл» появились «0/0 0%», при нажатии кнопки «на проверку» (даже с пустой формой) просто перезагружается страница
Борис И
02 апреля 2016, 09:20
0
Код сниgпета Ajax1
<?php
// Откликаться будет ТОЛЬКО на ajax запросы
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}

// Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
// Если в массиве POST нет действия - выход
if (empty($_POST['action'])) {return;}
$action1= $_POST['action'];
$res = "[[!TicketForm? &requiredFields=`longtitle,model,introtext` &allowedFields=`longtitle,fullname,model,introtext,avtor,video,yaobzor` &redirectUnpublished=`63` &parents=`$action1` &tplFormCreate=`tpl.Tickets.form.create1` ]]";
// Если у нас есть, что отдать на запрос - отдаем и прерываем работу парсера MODX
if (!empty($res)) {
echo($res);
}
И скрипт с частью страницы, помещен в чанк ajaxscr, на странице выводится через чанк
<div class="well create">
    <form name="ticketFormcat" action="" id="ticketFormcat" method="post" >
        <div class="form-group">
	    	<label  for="ticket-sections">Бытовая техника <span style="color: #F00;font-size: 12px;}">(выберите в первую очередь)</span></label>
                <select name="parentcat" class="form-control" id="parentcat" onchange="viborid(this.value);">
                       <option disabled="disabled" value="" ></option>
                        [[pdoMenu?
                        &parents=`0`
                        &level=`1`
                        &firstClass=``
                        &lastClass=``
                        &hereClass=``
                        &outerClass=``
                        &tplOuter=`@INLINE [[+wrapper]]`
                        &tpl=`@INLINE <option value="[[+id]]">[[+menutitle]]</option>`
                    ]]
            </select>
        </div>
    </form>
    
    
    
    
   <script type="text/javascript">
   function viborid(action) {
   
  // Ajax запрос к текущей страницы (а на ней наш сниппет) методом post
	$.post(document.location.href, {action: action}, function(data) {
		// Выдаем ответ
		alert('Запрос успешно выполнен')
		$('#result').html(data);
	})
  
   }
   
</script>

<!-- html элемент для вставки ответа от php -->
<div id="result"></div>
</div>
Вывод на странице
[[!Ajax1]]
[[$ajaxscr?]]
Борис И
02 апреля 2016, 08:58
0
Fenom, не использую. Пытаюсь вывести сниппет TicketForm с разными parent в зависимости от выбранного события
Борис И
02 апреля 2016, 08:36
0
Василий, доброе утро. Прошу подсказать.
Пытаюсь вывести через ajax сниппет (т.е изначально сниппета на странице нет, он выводится по срабатыванию события). Сниппет выводится, но текстом, парсер видимо его не обрабатывает.
Если меняю в коде
die($res); на echo($res)
то выводится целая страница в странице, вместе с обработанным сниппетом.
1. Если я правильно понял, то парсер заново обрабатывает всю страницу, поэтому и получается страница в странице?
2. Возможно ли сделать так, чтобы парсер обрабатывал только вновь вставленный сниппет?
Борис И
20 марта 2016, 20:51
0
&showLog =`1` пробовали смотреть что пишет
Борис И
20 марта 2016, 16:51
0
У меня тоже была проблема с выводом, решилась добавлением
&ajaxTplMore=`@INLINE <button class="btn btn-success btn-more">Показать еще</button>`
Вот мой код вызова целиком
<div id="pdopage">
	[[!+page.nav]] 
		<div class="rows">
			  [[!pdoPage?  
				  &ajaxMode=`button`
				  &cache=`1` 
				  &cacheTime=`86400` 
				  &parents=`13` 
				  &prepareTVs=`1` 
				  &element=`getTickets` 
				  &includeTVs=`avtor,model,firstImage` 
				  &limit=`7` 
				  &tpl=`tpl-1` 
				  &hideContainers=`1` 
				  &ajaxTplMore=`@INLINE <button class="btn btn-success btn-more">Показать еще</button>`
			   ]] 
		</div>
	[[!+page.nav]]
</div>