Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как сократить кол-во значений доп. поля в полной новости?

Как сократить кол-во значений доп. поля в полной новости?


     22.10.2022    Все вопросы » Общие вопросы по PHP    469

вопрос
На этом сайте нашел хак.

Найти код в \engine\modules\show.full.php

$tpl->set( $matches[0], $xfieldsdata[$value[0]] );
        
}
после вставить

if ( preg_match( "#\\[xfvalue_{$preg_safe_name} symbol=\"(.*)\".+?sum.+?\\]#iSu", $tpl->copy_template, $matches ) ) {
                
                    $matchesSy = $matches[1][0];
                    
                    preg_match( "#\\[xfvalue_{$preg_safe_name}.+?symbol.+?sum=\"(.*)\"\\]#iSu", $tpl->copy_template, $matches );
                    
                    $matchesSu = $matches[1][0];
                            
                    $xfieldsdataList = explode($matchesSy,$xfieldsdata[$value[0]]);
                    $xfieldsdataCount = count($xfieldsdataList);
                    
                    $xfieldsdataSum = "";
                    for ($ixs=0; $ixs<$matchesSu; $ixs++) {
                        $xfieldsdataSum .= trim($xfieldsdataList[$ixs]);
                        if ($ixs<$matchesSu - 1) $xfieldsdataSum .= ", ";
                    }

                    $tpl->set( $matches[0], $xfieldsdataSum );
                
                }


В файле шаблона полной новости код [xfvalue_actors symbol="," sum="3"]

Все работает в случае если обрезать значения надо максимум до 9

Если я указываю " sum="10" то на выходе получаю 1 значение. К примеру актеров 20 а мне нужно чтобы вывело первых 10

Пожалуйста подскажите что надо поменять в коде чтобы срабатывало с двухзначным числом

Чтобы срабатывало [xfvalue_actors symbol="," sum="10"] или [xfvalue_actors symbol="," sum="11"] любое число двухзначное

Ответил: LazyDev


if (preg_match("#\\[xfvalue_{$preg_safe_name} symbol=['\"](.+?)['\"]\s?(sum=['\"](.+?)['\"])?\\]#i", $tpl->copy_template, $matches)) {
	$matches[1] = $matches[1] ?: ',';

	$xfArrayValues = explode($matches[1], $xfieldsdata[$value[0]]);
	$xfCoutValues = count($xfArrayValues);

	$xfieldsdataSum = '';
	if ($matches[3] > $xfCoutValues || !$matches[3] || $matches[3] < 0) {
	    $matches[3] = $xfCoutValues;
	}

	$xfArrayValues = array_slice($xfArrayValues, 0, $matches[3]);
	$xfArrayValues = implode($matches[1], $xfArrayValues);

	$tpl->set($matches[0], $xfArrayValues);
}

3 комментария

Kentavr
Юзер

Kentavr - 22 октября 2022 12:17 -

Спасибо LAZYDEV работает исправление. А почему решение тупое то ) Нагрузки же нет никакой и выводит то что надо. Если есть другое решение, напишите здесь. Людям пригодится думаю. Лучше конечно чтобы после последнего было троеточие и при нажатии выводило полный список

Kentavr
Юзер

Kentavr - 22 октября 2022 13:01 -

Исправление не совсем корректно работает. указал sum="10" теперь если актеров больше 10 то все ок, а если меньше 10 то запятые добавляются.

Так вот теперь выводит В ролях: Борис Галкин, Никита Манец, Дмитрий Куличков, , , , , , ,

Как это исправить в моем варианте?

Вариант [xfvalue_x limit="x"] не подходит, так как обрезает определенное кол-во слов. А у актеров могут быть разные имена по длине.

LazyDev
PHP-developer

LazyDev - 24 октября 2022 02:44 -

Я обновил ответ.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх