Евгений

Евгений

С нами с 17 апреля 2019; Место в рейтинге пользователей: #1081
Евгений
11 февраля 2021, 18:35
+1
Здравствуйте, Алексей! Благодарю за компонент, удобный.

Есть небольшое добавление по выводу звёзд на рейтингах. Текущий ваш вариант не учитывает пробел между звёздами (который необходим, чтобы они выводились не слитно), поэтому выводит не совсем корректно. Т.е. если рейтинг 4.5, к примеру, то на 5-ой звезде он закрашен лишь чуть, а не наполовину и т.п…

Добавил небольшую функцию в сниппет ecThreadRating, для корректной заливки.
Кусок кода ниже. Верхушка и конец те же.

Надеюсь пригодится!

$count = $thread->get('count');
    
    function percent($v, $max) {
    	$sw = 1/4; # space/width (depends on stars space/width on background image) default - 4px/16px
    	$percent = (intval($v) * (1 + $sw) + ($v - intval($v))) / ((1 + $sw) * $max - $sw); # percent
    	return number_format($percent * 100, 3);
    }
    
    foreach($ratingFields as $field) {
        $data = array_merge($data, array(
            $field.'_wilson_percent' => percent($thread->get($field.'_wilson'), $ratingMax),
            $field.'_simple_percent' => percent($thread->get($field.'_simple'), $ratingMax),
            // TEST only
            $field.'_votes' => array(),
        ));

P.s. Также для кастомизации звезд (свой дизайн), перевёл в scss и задал для своих размеров.
Размеры звёзд задавать целыми (px), отступ справа тоже. Легко делается в Figma по размерам, экспорт в svg.
Может кому пригодится (часть кода, для понимания):

/*
 * Rating input
 **/

// Depends on stars width/height/space on background image (default values below)
$es_w: 16; // es star width
$es_h: 16; // es star height
$es_space: 4; // horizontal right space (space between stars)
........................
.ec-stars {
	background-position: 0 -#{$es_h}px;
	background-repeat: repeat-x;
	margin: 10px 0;
	width: #{($es_w + $es_space)*5 - $es_space}px;
	height: #{$es_h}px;
	//transform: scale(1.5);
	//transform-origin: 0 0;
}
........................
.ec-stars span.rating-0{width: 0;}
@for $i from 1 through 5 {
	.ec-stars span.rating-#{$i} {
		width: #{($es_w + $es_space)*$i - $es_space}px;
	}
}
........................
Евгений
16 октября 2020, 11:08
0
Тоже долго искал. Работает на ура! Василий ответил:
https://modx.pro/help/7664#comment-53654
Бронебойный вариант:
$.post(document.location, {ms2_action: 'cart/clean'});
Евгений
17 апреля 2019, 16:16
0
Результат как на Связном.





Копируем сниппет pdoPage с новым именем _pdoPage.
(С целью исключения перезаписи при обновлении)

Строка 159. Конструкция вида:
if (!empty($pageCount) && $pageCount > 1) {
        $pagination = array(
            'first' => $page > 1 && !empty($tplPageFirst)
                ? $pdoPage->makePageLink($url, 1, $tplPageFirst)
                : '',
            'prev' => $page > 1 && !empty($tplPagePrev)
                ? $pdoPage->makePageLink($url, $page - 1, $tplPagePrev)
                : '',
            'pages' => $pageLimit >= 7 && empty($disableModernPagination)
                ? $pdoPage->buildModernPagination($page, $pageCount, $url)
                : $pdoPage->buildClassicPagination($page, $pageCount, $url),
            'next' => $page < $pageCount && !empty($tplPageNext)
                ? $pdoPage->makePageLink($url, $page + 1, $tplPageNext)
                : '',
            'last' => $page < $pageCount && !empty($tplPageLast)
                ? $pdoPage->makePageLink($url, $pageCount, $tplPageLast)
                : '',
        );

Меняем
$page > 1 на $page > 2
$page < $pageCount на $page < $pageCount - 1

Сам вызов
[[!_pdoPage?
    -//-
    &tplPageFirst=`@INLINE <li class="control"><a href="[[+href]]">[[+pageNo]]</a></li>`
    &tplPageLast=`@INLINE <li class="control"><a href="[[+href]]">[[+pageNo]]</a></li>`
    &tplPageFirstEmpty=`@INLINE `
    &tplPageLastEmpty=`@INLINE `
    &tplPagePrevEmpty=`@INLINE `
    &tplPageNextEmpty=`@INLINE `
]]