• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь Вывести все значения одного доп поля

у себя проверил - работает(создал доп поле year и внес значение в некоторые новости)
+ добавил проверку есть ли значение
+ добавил время жизни кеша
PHP:
<?php
include ('engine/api/api.class.php'); // подключаем api
$table = 'dle_post';  // название таблицы
$fields  = 'xfields'; // нужные поля, * - все поля
$where = 'approve=1'; // условия выборки
$multirow = 1; // забирать ли один ряд или несколько
$start = 0; // начальное значение выборки
$limit = 0; // количество записей для выборки, 0 - выбрать все
$xfield = 'year'; ///ИМЯ ДОП ПОЛЯ ДЛЯ ВЫВОДА
$time = '14000'; //время жизни кеша

$xfields = $dle_api->load_from_cache (xfields, $time, $xfields); //берем наш кеш, если есть конечно ))

if( !$userblock ) { //проверяем взяли ли мы кеш и если не взяли, то делаем запрос

    $xfields = $dle_api->load_table ($table,$fields,$where,$multirow,$start,$limit); //делаем запрос к бд
    }

$dle_api->save_to_cache ( xfields, $xfields); //сохраняем в кеш

foreach($xfields as $value) //выводим на экран массив
  {
    if($value[xfields]){ //проверяем есть ли элемент в массиве
   
        $row = xfieldsdataload($value[xfields]); //получаем нужное нам доп поле
        if($row[$xfield]){ //проверяем есть ли значение
            echo "<strong>"; //любой тег ;)
            echo $row[$xfield];
            echo "</strong>"; //любой тег ;)
        }
    }
  }
 
  • Автор темы
  • Модер.
  • #12
Все разобрался, все работает... Сможешь подправить его ещё немного? а то нужно все повторы удалить и чтобы каждое значение выводилось только один раз, в ПХП я не силен и не знаю как это реализовать ......
 
я в php тоже не силён ))
+добавил удаление повторяющихся элементов
*исправил ошибку в кешировании
в принципе можно кешировать уже конечный вариант, но и так будет нормально
PHP:
<?php
include ('engine/api/api.class.php'); // подключаем api
$table = 'dle_post';  // название таблицы
$fields  = 'xfields'; // нужные поля, * - все поля
$where = 'approve=1'; // условия выборки
$multirow = 1; // забирать ли один ряд или несколько
$start = 0; // начальное значение выборки
$limit = 0; // количество записей для выборки, 0 - выбрать все
$xfield = 'year'; ///ИМЯ ДОП ПОЛЯ ДЛЯ ВЫВОДА
$time = '14000'; //время жизни кеша

$xfields = $dle_api->load_from_cache ($fields, $time, $xfields); //берем наш кеш, если есть конечно ))
if( !$xfields ) { //проверяем взяли ли мы кеш и если не взяли, то делаем запрос
    $xfields = $dle_api->load_table ($table,$fields,$where,$multirow,$start,$limit); //делаем запрос к бд
    $dle_api->save_to_cache ( xfields, $xfields); //сохраняем в кеш
    }

$stack = array(); //создаем пустой массив
foreach($xfields as $value){  // перебор значений массива
    if($value[xfields]){ //проверяем есть ли элемент в массиве
   
        $row = xfieldsdataload($value[xfields]); //получаем нужное нам доп поле
        if($row[$xfield]){ //проверяем есть ли значение
            array_push($stack, $row[$xfield]); //добавляем в конец массива полученное значение
            }
        }
    }
$stack = array_unique($stack); //убираем повторы
print_r($stack);
foreach($stack as $value){  //выводим окончательный вариант
    echo "<strong>"; //любой тег ;)
    echo $value;
    echo "</strong>"; //любой тег ;)
    }
 
  • Автор темы
  • Модер.
  • #14
Сейчас все выводится в таком виде:
Код:
Array ( [0] => фантастика, драма, детектив, приключения [1] => комедия, криминал, приключения, семейный [2] => мелодрама, комедия [3] => мелодрама, комедия, криминал [4] => триллер, драма [5] => комедия [7] => боевик, драма, военный, история [8] => военный, история [9] => драма, биография, история [10] => драма, история [11] => драма [12] => драма, криминал [13] => драма, комедия [14] => драма, военный, история [19] => мюзикл, комедия [20] => драма, военный, биография, история [22] => боевик, драма [23] => драма, военный, биография [25] => драма, мелодрама [27] => драма, биография [32] => мелодрама, военный [34] => драма, мелодрама, военный [35] => драма, военный [37] => триллер, драма, военный [38] => мюзикл, фэнтези, мелодрама, комедия, семейный [45] => драма, мелодрама, комедия [49] =>
т.е. нет никакой проверки на повторы в массиве :( и в се выводится как я понял с ID новостями....

UPD а после выводится все также списком всех значений доп полей
 
вот это лишнее print_r($stack); (это я для себя выводил :))

хм. я думал у тебя по одному значению в массиве(значение1||значение2||значение3||значение2||значение3=>значение1||значение2||значение3), а у тебя несколько значений через запятую.
Тут надо немного иначе. Сейчас времени нету, чуть позже решу задачу:beer:.
 
держи
PHP:
<?php

include ('engine/api/api.class.php'); // подключаем api
$table = 'dle_post';  // название таблицы
$fields  = 'xfields'; // нужные поля, * - все поля
$where = 'approve=1'; // условия выборки
$multirow = 1; // забирать ли один ряд или несколько
$start = 0; // начальное значение выборки
$limit = 0; // количество записей для выборки, 0 - выбрать все
$xfield = 'year'; ///ИМЯ ДОП ПОЛЯ ДЛЯ ВЫВОДА
$time = '14000'; //время жизни кеша

$xfields = $dle_api->load_from_cache ($fields, $time, $xfields); //берем наш кеш, если есть конечно ))
if( !$xfields ) { //проверяем взяли ли мы кеш и если не взяли, то делаем запрос
    $xfields = $dle_api->load_table ($table,$fields,$where,$multirow,$start,$limit); //делаем запрос к бд
    $dle_api->save_to_cache ( xfields, $xfields); //сохраняем в кеш
    }

$stack = array(); //создаем пустой массив
foreach($xfields as $value){  // перебор значений массива
    if($value[xfields]){ //проверяем есть ли элемент в массиве
   
        $row = xfieldsdataload($value[xfields]); //получаем нужное нам доп поле
        if($row[$xfield]){ //проверяем есть ли значение
           
            $rowdata = explode( ",", $row[$xfield]); //разбиваем наше значение на массив
            foreach($rowdata as $value){    //перебираем значения массива
                if($value){                    //проверяем есть ли значение
                    $value = trim($value);    //убираем пробелы
                    array_push($stack, $value); //добавляем в конец массива полученное значение
                    }
                }
            }
        }
    }
$stack = array_unique($stack); //убираем повторы
foreach($stack as $value){  //выводим окончательный вариант
    echo "<strong>"; //любой тег ;)
    echo $value;
    echo "</strong>"; //любой тег ;)
    }
 
  • Автор темы
  • Модер.
  • #17
Вот это уже то! Огромное спасибо за помощь. :beer: Осталось уточнить как можно к каждому значению прописать теги HTML, их нужно все вывести ссылками для модуля Для просмотра ссылки Войди или Зарегистрируйся
 
т.е. ты хочешь на отдельной странице вывести все доп поля без повторов в виде ссылок при нажатии на которые будут отбираться новости в которых присутствуют эти доп поля? это уже еще одна задача и достаточно большая, но ее можно решить используя еще один модуль.
Попробуй поставить модуль searchxfield, а затем поменяй
PHP:
echo "<strong>"; //любой тег ;)
echo $value;
echo "</strong>"; //любой тег ;)
на
PHP:
echo "<a href=/index.php?do=search_xf&q=";  //открываем ссылку
echo $value; //подставляем значение для поиска
echo ">";
echo $value; //имя ссылки
echo "</a><br/>"; //закрываем ссылку
 
  • Автор темы
  • Модер.
  • #19
С кодом
PHP:
$value = trim($value);    //убираем пробелы
Всё выводится одним целым словом:
Код:
фантастикадрамадетективприключениякомедиякриминалсемейныймелодраматриллербоевиквоенныйисториябиографиямюзиклфэнтезидетскийужасывестернспортмузыкаприключения-короткометражка
И видно что некоторые поля повторяются. Если просто закомментировать эту строку, то тогда идут пробелы ещё между полями, но пробелов между полями началом и концом значения по разным новостям не идут, и выходят в таком виде:
Код:
фантастика драма детектив приключениякомедия криминал семейныймелодрама комедиятриллербоевик военный историявоенныйдрама биографиямюзикл мелодрама фэнтезифэнтезидетский фантастикаприключенияужасы мюзикл триллер вестернкриминал спорт семейный детектив музыка боевикприключения-короткометражкасемейный

С кодом выше ссылки выводятся, но почему то по некоторым значениям к ссылке не прописывается значение поля, и тем самым ссылка обрубается и идет без значения поля :( Плюс к этому значения полей при открытии по ссылке делает в виде РєСЂРёРјРёРЅР° и соответсвенно ничего не открывает.

PS помню на PHP есть функция кодировки, попробую щас ее ее сам найти.
PSS с кодом для убирания пробелов все выводится только одни раз, и все почти нормально, кроме кодировки самой ссылки :eek:

UPD пробовал сам подставить iconv но что то ничего так и не работает.

UPD все сделал! заменил строку
PHP:
echo $value; //подставляем значение для поиска
на
PHP:
echo urlencode($value); //подставляем значение для поиска
теперь все ссылки выводятся нормально! ОГРОМНОЕ СПАСИБО за помощь... :beer:
Забыл тоже узнать немаловажное, как можно изменить сортировку полей чтобы они шли по алфавиту? - решение - код
PHP:
asort($stack);
после удаления повторов.
 
Последнее редактирование:
Вот и отлично!
Тему тогда можно закрывать.(ты кстати вроде сам можешь ее закрыть без модераторов)


by killoff: закрыл
 
Последнее редактирование модератором:
Назад
Сверху