Борис И

Борис И

Был в сети 15 января 2023, 17:28
Заказы не принимаю
Придумал кривое решение. Создать временно шаблон temp скопировать туда код всех шаблонов сайта. modDevTools покажет все используемые чанки в одном месте, но от такого решения, что-то воротит. Может быть кто сталкивался с похожими задачами. Как Вы чистите незнакомый сайт от лишних чанков ...?
<?php
$str = $resource->content;
        $str = preg_replace_callback('|<h([2,3]{1})>(.+)</h[2,3]{1}>|iU', function($matches){
	        static $id = 0;
        	$id++;
        	return '<h'.$matches[1].' id="'.$id.'">'.$matches[2].'</h'.$matches[1].'>';
        }, $str);
    $resource->set('content',$str);
    $str1 = $resource->content;
    $res = preg_match_all('|<h([2,3]{1})[\s]+id=[\s]*\"([^\"]*)\">(.+)</h[2,3]{1}>|iU',$str1, $result);
    if (!empty($res)){ $strres='<b>Содержание:</b></br>';} else { $strres=''; }

foreach ($result[3] as $key => $value) {
    $strres=$strres.'<a class="list-content" href="[[*uri]]#'.$result[2][$key].'">'.$result[3][$key].'</a></br>';
                             
                            }
   $tv = $modx->getOption('TV',$scriptProperties,'video');
   $video = $resource->GetTVValue($tv); 
   
   if($video!='') {
      $strres=$strres.'<a class="list-content" href="[[*uri]]#video">'.'Видео</a></br>';   
    }
  $tv = $modx->getOption('TV',$scriptProperties,'id-search-content-tv');
  $contentslist = $resource->GetTVValue($tv);                           
$resource->setTVValue($tv,$strres);
  
$resource->save();
Вот пример на вскидку otzovik.com можно проголосовать за обзор не регистрируясь и таких примеров много.
Еще пример, это сайт где вообще нет авторизации, потому что пользователям это не нужно, они пришли за информацией и никто не будет регистрироваться для оценки статьи (даже через соц сеть), а если регистрироваться не нужно то запросто кликнут для оценки. Для сообществ я с вами полностью согласен нужна авторизация, а для «информационников» она в большинстве случаев бесполезна.
А вот рейтинг это очень нужное дополнение, по нему можно сортировать статьи для пользователей, а значит повысить удобство сайта.
Личный пример на основе Tickets. Были комментарии только для авторизованных (через соц. сеть), вроде нажми кнопочку и оставь отзыв не заполняя доп. поля — комментариев «кот наплакал». Сделали возможность комментировать для анонимов и люди стали оставлять комментарии, при это им приходится заполнять имя, email… где логика? Но это факт.
На мой взгляд у вас хороший компонент, а добавление возможности голосовать не авторизованным, сделало бы его еще лучше.
Спасибо.
Очень жаль. Есть много проектов где нужна возможность голосовать без авторизации, где накручивать рейтинг статье просто нет смысла и не кто не будет регистрироваться и авторизовываться чтобы проголосовать.
Без авторизации есть css rating stars но у него есть ОГРОМНЫЕ минусы: 1. работает с перезагрузкой страницы 2. появляется огромное число дублей страницы, за счет формирования звездочек ссылками siteurl?vote=5&star_id=… (а именно по 5 штук к каждой)

В общем voteforms идеально бы подошел на многих сайтах, если бы была возможность голосовать без авторизации.
Удалил
if (!$VoteForms->authenticated) {
  die($modx->lexicon('voteforms_form_err_no_auth'));
}
еще из
assets/components/voteforms/action.php
и авторизацию больше не запрашивает, проголосовал один раз не авторизованным все успешно.
Для проверки открыл туже страницу другим браузером и пытаюсь еще голосовать, но число голосов не увеличивается.
Здравствуйте. Помогите пожалуйста, возникла проблема. Решил обновить сайт с modx 2.2.16 на 2.3.5 и естественно заодно обновил и все компоненты на последние, включая Tickets (был 1.4.2).
Теперь при оправке тикета с фото, с фронта не меняются пути картинки с 0 на id, остаются /assets/images/tickets/0/… причем все отображается, картинка помещается в папку 0
Все изменения откатил и попробовал обновить только Tickets, не трогая modx. Ситуация та же.
Здравствуйте. Помогите пожалуйста, не могу разобраться. В voteforms возможность голосовать только для авторизированных пользователей. Гостям голосовать никак не получится?
"Вы должны авторизоваться, чтобы проголосовать."
Дизайн нравится, все качественно, но контактов все таки не хватает. Регистрироваться, чтобы задать вопрос, не все будут, да и нигде явно это не указано.
В общем, мое мнение, для любой организации необходимо указывать контакты (на видном месте, хотя бы email), это упрощает взаимодействие с потенциальными клиентами и повышать доверие людей ничего не знающих о компании.
В идеале, помимо контактов, онлайн консультант, но это уже другие организационные проблемы.
Василий, а где контакты? С людьми в сообществе все понятно, они знают как связаться, но наверное проект нацелен на более широкую аудиторию.
На мой взгляд, как пользователя shared хостинга, очень часто перед заказом нужно задать пару вопросов поддержке, а контактов нет (соц. сети не в счет).
Век живи, век учись. Мой вариант выше с косяком в регулярке ($img=preg_replace('/0{1}/',$id."/",$img);). Вот новый вариант
<?php
if($modx->context->get('key') == 'mgr') {
    $tv = $modx->getOption('TV',$scriptProperties,'firstImage');
    $img = $resource->GetTVValue($tv);

    if(empty($img)) {
         $def_img ='/assets/tplobzor/img/noimgdef.jpg';
         $media_source = '/assets/images/tickets/';
         $text = $resource->content;
    
         if (preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i',$text , $matches )!=0)	{$img = $matches[1][0];}
         else {$img = $def_img;}
    
         $img = str_replace($media_source, '', $img);
         $resource->setTVValue($tv,$img);
    }
}
else {
    
    $tv = $modx->getOption('TV',$scriptProperties,'firstImage');
    $img = $resource->GetTVValue($tv);

    if(empty($img)) {
         $def_img ='/assets/tplobzor/img/noimgdef.jpg';
         $media_source = '/assets/images/tickets/';
         $text = $resource->content;
    
         if (preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i',$text , $matches )!=0)	{$img = $matches[1][0];}
         else {$img = $def_img;}
         $id=$modx->resource->get('id');
         $img=preg_replace('/\/[0]{1}\//',"/".$id."/",$img);
         $img = str_replace($media_source, '', $img);
         $resource->setTVValue($tv,$img);
    }
    
    
}
Немного переделал, теперь и при публикации с фронта с помощью Tickets пути прописываются верно.

if($modx->context->get('key') == 'mgr') {
    $tv = $modx->getOption('TV',$scriptProperties,'firstImage');
    $img = $resource->GetTVValue($tv);

    if(empty($img)) {
         $def_img ='/assets/tplobzor/img/noimgdef.jpg';
         $media_source = '/assets/images/tickets/';
         $text = $resource->content;
    
         if (preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i',$text , $matches )!=0)	{$img = $matches[1][0];}
         else {$img = $def_img;}
    
         $img = str_replace($media_source, '', $img);
         $resource->setTVValue($tv,$img);
    }
}
else {
    
    $tv = $modx->getOption('TV',$scriptProperties,'firstImage');
    $img = $resource->GetTVValue($tv);

    if(empty($img)) {
         $def_img ='/assets/tplobzor/img/noimgdef.jpg';
         $media_source = '/assets/images/tickets/';
         $text = $resource->content;
    
         if (preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i',$text , $matches )!=0)	{$img = $matches[1][0];}
         else {$img = $def_img;}
         $id=$modx->resource->get('id');
         $img=preg_replace('/0{1}/',$id."/",$img);
         $img = str_replace($media_source, '', $img);
         $resource->setTVValue($tv,$img);
    }
    
    
}