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

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

  • Автор темы
  • Модер.
  • #31
Замени в php файле на это :
Тогда получается:
Код:
Искали : Мэтт Дэймон
Нашли : мультфильм => 1
Нашли : мюзикл => 1
Нашли : комедия => 1
Нашли : семейный => 1
а по факту:
Код:
фантастика, приключения
мультфильм, мюзикл, комедия, семейный
драма, семейный, комедия
фантастика, драма, приключения
военный, драма, комедия
фантастика, триллер, драма, комедия
фантастика, боевик, триллер, драма
драма, мелодрама, биография
драма
драма, комедия
чего то вообще нет на выводе и кол-во всегда 1 :conf:
 
Тогда получается:
Код:
Искали : Мэтт Дэймон
Нашли : мультфильм => 1
Нашли : мюзикл => 1
Нашли : комедия => 1
Нашли : семейный => 1
а по факту:
Код:
фантастика, приключения
мультфильм, мюзикл, комедия, семейный
драма, семейный, комедия
фантастика, драма, приключения
военный, драма, комедия
фантастика, триллер, драма, комедия
фантастика, боевик, триллер, драма
драма, мелодрама, биография
драма
драма, комедия
чего то вообще нет на выводе и кол-во всегда 1 :conf:
Я только что подправил код, там чуток не верно было. Замени еще разок.
 
  • Автор темы
  • Модер.
  • #33
Я только что подправил код, там чуток не верно было. Замени еще разок.
; забыл на 74-75 строках :) Но тоже не все выводит, например
Код:
Искали : Мэтт Дэймон
Нашли : приключения => 2
Нашли : комедия => 3
Нашли : драма => 1
Нашли : биография => 1
Нашли : драма => 1
Нашли : семейный => 1
то же
Код:
Нашли : мультфильм => 1
Нашли : мюзикл => 1
что были раньше уже не выводит...
 
Проверил, у меня с этим кодом все ок работает
PHP:
<?php
/*
=============================================================================
SEARCH FX - Хак по доп полям
=============================================================================
Автор хака: Gameer
-----------------------------------------------------
URL: http://gameer.name
-----------------------------------------------------
email: gameer@mail.ua
-----------------------------------------------------
skype: gameerblog
=============================================================================
Файл:  search_fx.php
=============================================================================
Версия хака : .1 Stable Release
=============================================================================
/*
* Что может:
* - То что описано в теме
*
*/

$val = trim(strip_tags(stripslashes($val)));
$cache = trim(strip_tags(stripslashes($cache)));
$xf_name = trim(strip_tags(stripslashes($xf)));
$fx_name = trim(strip_tags(stripslashes($fx)));

$allow_cache = ($config['version_id'] >= '10.2') ? $config['allow_cache'] == '1' : $config['allow_cache'] == "yes";

$is_change = false;

if ($cache == 'y' && !$allow_cache) // если кэш не включен включаем принудительно
{
    if(!$allow_cache)
    {
        if ($config['version_id'] >= '10.2')
            $config['allow_cache'] = '1';
        else
             $config['allow_cache'] = "yes";
        $is_change = true;
    }
}
if($cache == 'y')
{
    $search_xf = false;

    $search_xf = get_cache( "news_fx_search", $config['skin'] . $val . $xf_name . $fx_name);
    if($search_xf !== false)
    {
        echo $search_xf;
        return;
    }
}
$sql = $db->query("SELECT xfields FROM " . PREFIX . "_post WHERE SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$xf_name}|', -1 ) ,  '||', 1 ) LIKE '%{$val}%'");
$count_rows = $sql->num_rows;
$tpl->load_template('search_xf.tpl');
if($count_rows > 0)
{
    $arr_two = array();
    while ($row = $db->get_row($sql))
    {
        $arr = xfieldsdataload($row['xfields']);
        $arr_two[] = $arr[$fx_name];
    }

    unset($arr);
    $arr_all = array();
    for($i = 0; $i < count($arr_two); $i++)
    {
        if(count(explode(',',$arr_two[$i])) >= 2)
        {
            $expl_all = explode(',',$arr_two[$i]);
            foreach($expl_all as $data)
               $arr_all[] = trim(strip_tags(stripslashes($data)));
        }
        else
            $arr_all[] = trim(strip_tags(stripslashes($arr_two[$i])));
    }
    unset($arr_two);
    $count_arr = array_count_values($arr_all);
    unset($arr_all);

    $tpl->copy_template = str_replace("{val}", $val, $tpl->copy_template);
    $tpl->copy_template = preg_replace( "'\\[val\\](.*?)\\[/val\\]'si", "\\1", $tpl->copy_template);

    foreach($count_arr as $key => $value)
    {
        $tpl->copy_template = str_replace("{value}", trim(strip_tags(stripslashes($key))), $tpl->copy_template);
        $tpl->copy_template = str_replace("{count}", intval($value), $tpl->copy_template);
        $tpl->copy_template = preg_replace( "'\\[val\\](.*?)\\[/val\\]'si", "", $tpl->copy_template);
        $tpl->compile('search_xf');
    }

    $tpl->clear();
    $search_xf = $tpl->result['search_xf'];
}
else
    $search_xf = "Ничего не найдено.";

if($cache == 'y' && $is_change)
    create_cache( "news_fx_search", $search_xf, $config['skin'] . $val . $xf_name . $fx_name, true );

echo $search_xf;

function get_cache($name, $id)
{
    global $config, $is_logged, $member_id;
    if( $is_logged ) $end_file = $member_id['user_group'];
    else $end_file = "0";
    $id = md5( $id );
    $name = $name . "_" . $id . "_" . $end_file;

    $buffer = @file_get_contents( ENGINE_DIR . "/cache/" . $name . ".tmp" );

    if ( $buffer !== false AND $config['clear_cache'] )
    {
        $file_date = @filemtime( ENGINE_DIR . "/cache/" . $name . ".tmp" );
        $file_date = time()-$file_date;
        if ( $file_date > ( $config['clear_cache'] * 60 ) )
        {
            $buffer = false;
            @unlink( ENGINE_DIR . "/cache/" . $name . ".tmp" );
        }

        return $buffer;
    }
    else
        return $buffer;
}
?>
 
держи
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>"; //любой тег ;)
    }
почему эту код не работает для DLE 11.1 ?
 
Это не ошибка PHP... У тебя сервер при ошибках PHP возвращает код состояния 500.
Ищи либо в логах ошибку, либо включай вывод ошибок на экран.
 
  • Автор темы
  • Модер.
  • #39
error.jpg
кидай этот файл в папку модулей engine/modules и подключай этот файл иклудом в шаблон {include gile="тут файл"}
 
Назад
Сверху