Я немного PHP новичка так легко идти на меня :)PHP не будет возвращать данные из функции
Я пытаюсь вернуть имя категории для искали записи, после определения, является ли категория самый низкий ребенок.
Мой SQL-оператор возвращает несколько повторяющихся записей (для каждой категории и подкатегории, в которой он находится, т.е. если запись находится в разделе «Автомобили»> «Части»> «Двигатель»> «Коленчатые валы», она появится 4 раза, любой из вас, кто использует Expression Engine должен знать, что он делает это :))
Это SQL заявление, которое возвращает результаты:
SELECT wd.field_id_5, wd.field_id_7, wd.field_id_14, wd.field_id_15, wd.field_id_18, wd.field_id_20, wt.entry_id, wt.title, wt.url_title, cp.cat_id, c.cat_name, c.cat_url_title, c.parent_id FROM exp_weblog_data AS wd LEFT JOIN exp_weblog_titles AS wt ON wd.entry_id = wt.entry_id LEFT JOIN exp_category_posts AS cp ON wt.entry_id = cp.entry_id LEFT JOIN exp_categories as c ON cp.cat_id = c.cat_id WHERE wt.title LIKE '%$term%'
следующий код, чтобы попытаться получить самую глубокую категорию ребенка, так, чтобы не отображать записи 4 раза.
foreach ($query->result as $row)
{
$entry_id = $row['entry_id'];
$title = $row['title'];
$url_title = $row['url_title'];
$cat_id = $row['cat_id'];
$cat_name = $row['cat_name'];
$category_url = $row['cat_url_title'];
$parent = $row['parent_id'];
$image = $row['field_id_7'];
$image_path = "example.com" . $image;
$location = $row['field_id_14'];
$country = $row['field_id_20'];
$currency = $row['field_id_18'];
$price = $row['field_id_5'];
$postage = $row['field_id_15'];
// if the entry id doesnt exist in array already
// add into array (all details)
if (! array_key_exists($entry_id, $entries))
{
$entries[$entry_id] = array($title, $url_title, $cat_id, $cat_name, $category_url, $parent, $image, $image_path, $location, $country, $currency, $price, $postage);
}
}
$count = 0;
// for each entry in array, run function to find lowest child and display
function determine_child($entry_id, $cat_id, $cat_name)
{
global $DB, $cat_name;
$sql = "SELECT c.cat_id, c.cat_name FROM exp_categories AS c INNER JOIN exp_category_posts AS cp ON c.cat_id = cp.cat_id WHERE c.parent_id = '{$cat_id}' AND cp.entry_id = '{$entry_id}'";
$query = $DB->query($sql);
if ($query->num_rows > 0)
{
foreach($query->result as $cat_row)
{
$entry_id = $entry_id;
$cat_id = $cat_row['cat_id'];
$cat_name = $cat_row['cat_name'];
determine_child($entry_id, $cat_id, $cat_name);
}
}
else
{
return $cat_name;
}
} // END FUNCTION
foreach ($entries as $key => $val)
{
$entry_id = $key;
$cat_id = $val[2];
$cat_name = $val[3];
$cat_name = determine_child($entry_id, $cat_id, $cat_name);
echo $val[0] . " - " . $cat_name . "<br />";
}
Приведенные выше код вторит из правильной категории, но не возвратит его в переменный $ cat_name в цикле Еогеаспа в нижней части.
Надеюсь, я был достаточно ясен, и спасибо за любую помощь!
Не было бы 'define_child();' внутри функции создавать непрерывный цикл? – jolt
Нет, потому что $ cat_id изменяется каждый раз, пока он не возвращает никаких результатов. – Leon