За последние 24 часа нас посетили 61011 программистов и 1744 робота. Сейчас ищут 1026 программистов ...

Вывод <title>

Тема в разделе "PHP для новичков", создана пользователем Linne, 29 авг 2014.

  1. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Здравствуйте, товарищи.

    У меня затруднение с выводом <title> и заголовка страницы (<h1>). Суть в следующем. В xml-документе (который представляет собой страницу одной категории) есть узел с id категории, к которой пренадлежит данная страница (<catid>). ID — целое число (1, 2, 3 и т. д.). Имена же категорий хранятся в xml-документе со списком категорий (значение атрибута узла <category> — label="имя_категории"). На странице «Список категорий» — список ссылок на категории. Следовательно, при клике на одну из ссылок переходим на страницу конкретной категории со списком статей. На такой странице конечно должен быть заголовок с названием категории. Вот его-то мне и не удается вывести. Как мне кажется, нужно каким-то образом определить id страницы и подгрузить из файла с именами категорий значение атрибута «label» тега <category>.
    Структура такого файла такова:
    Код (Text):
    1. <categories>
    2.    <category id="cat_id" label="cat_label" />
    3.    <…и т. д.… />
    4. </categories>
    Вот такая конструкция выводит список вообще всех категорий:
    Код (Text):
    1.  
    2. <h1><?php
    3. $cats = simplexml_load_file($fileDir . 'categories.xml');
    4.    foreach ($cats->category as $cat) {
    5.       echo '<p>' . htmlentities($cat['label']) . '</p><br />';
    6.    }
    7. ?></h1>
    К сожалению, это все, на что хватило ума. Всю ночь копошился, так ни к чему и не пришел. Очень надеюсь на помощь форумчан.
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    а что говорит var_dump( $cats ) ???
     
  3. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Страшно показывать :)
    Вот чего говорит:
    Код (Text):
    1.  object(SimpleXMLElement)#2 (1) { ["category"]=> array(6) { [0]=> object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "6" ["label"]=> string(22) "Server Side Essentials" ["status"]=> string(4) "live" } } [1]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "7" ["label"]=> string(15) "Test Category 1" ["status"]=> string(4) "live" } } [2]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "8" ["label"]=> string(15) "Test Category 2" ["status"]=> string(4) "live" } } [3]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "9" ["label"]=> string(15) "Test Category 3" ["status"]=> string(4) "live" } } [4]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "10" ["label"]=> string(15) "Test Category 4" ["status"]=> string(4) "live" } } [5]=> object(SimpleXMLElement)#11 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "11" ["label"]=> string(15) "Test Category 5" ["status"]=> string(4) "live" } } } } Server Side Essentialsobject(SimpleXMLElement)#2 (1) { ["category"]=> array(6) { [0]=> object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "6" ["label"]=> string(22) "Server Side Essentials" ["status"]=> string(4) "live" } } [1]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "7" ["label"]=> string(15) "Test Category 1" ["status"]=> string(4) "live" } } [2]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "8" ["label"]=> string(15) "Test Category 2" ["status"]=> string(4) "live" } } [3]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "9" ["label"]=> string(15) "Test Category 3" ["status"]=> string(4) "live" } } [4]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "10" ["label"]=> string(15) "Test Category 4" ["status"]=> string(4) "live" } } [5]=> object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "11" ["label"]=> string(15) "Test Category 5" ["status"]=> string(4) "live" } } } } Test Category 1object(SimpleXMLElement)#2 (1) { ["category"]=> array(6) { [0]=> object(SimpleXMLElement)#11 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "6" ["label"]=> string(22) "Server Side Essentials" ["status"]=> string(4) "live" } } [1]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "7" ["label"]=> string(15) "Test Category 1" ["status"]=> string(4) "live" } } [2]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "8" ["label"]=> string(15) "Test Category 2" ["status"]=> string(4) "live" } } [3]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "9" ["label"]=> string(15) "Test Category 3" ["status"]=> string(4) "live" } } [4]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "10" ["label"]=> string(15) "Test Category 4" ["status"]=> string(4) "live" } } [5]=> object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "11" ["label"]=> string(15) "Test Category 5" ["status"]=> string(4) "live" } } } } Test Category 2object(SimpleXMLElement)#2 (1) { ["category"]=> array(6) { [0]=> object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "6" ["label"]=> string(22) "Server Side Essentials" ["status"]=> string(4) "live" } } [1]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "7" ["label"]=> string(15) "Test Category 1" ["status"]=> string(4) "live" } } [2]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "8" ["label"]=> string(15) "Test Category 2" ["status"]=> string(4) "live" } } [3]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "9" ["label"]=> string(15) "Test Category 3" ["status"]=> string(4) "live" } } [4]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "10" ["label"]=> string(15) "Test Category 4" ["status"]=> string(4) "live" } } [5]=> object(SimpleXMLElement)#11 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "11" ["label"]=> string(15) "Test Category 5" ["status"]=> string(4) "live" } } } } Test Category 3object(SimpleXMLElement)#2 (1) { ["category"]=> array(6) { [0]=> object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "6" ["label"]=> string(22) "Server Side Essentials" ["status"]=> string(4) "live" } } [1]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "7" ["label"]=> string(15) "Test Category 1" ["status"]=> string(4) "live" } } [2]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "8" ["label"]=> string(15) "Test Category 2" ["status"]=> string(4) "live" } } [3]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "9" ["label"]=> string(15) "Test Category 3" ["status"]=> string(4) "live" } } [4]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "10" ["label"]=> string(15) "Test Category 4" ["status"]=> string(4) "live" } } [5]=> object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "11" ["label"]=> string(15) "Test Category 5" ["status"]=> string(4) "live" } } } } Test Category 4object(SimpleXMLElement)#2 (1) { ["category"]=> array(6) { [0]=> object(SimpleXMLElement)#11 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "6" ["label"]=> string(22) "Server Side Essentials" ["status"]=> string(4) "live" } } [1]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "7" ["label"]=> string(15) "Test Category 1" ["status"]=> string(4) "live" } } [2]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "8" ["label"]=> string(15) "Test Category 2" ["status"]=> string(4) "live" } } [3]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(3) { ["id"]=> string(1) "9" ["label"]=> string(15) "Test Category 3" ["status"]=> string(4) "live" } } [4]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "10" ["label"]=> string(15) "Test Category 4" ["status"]=> string(4) "live" } } [5]=> object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(3) { ["id"]=> string(2) "11" ["label"]=> string(15) "Test Category 5" ["status"]=> string(4) "live" } } } } Test Category 5
     
  4. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    Ну вот, если с форматированием вывести var_dump( $cats ) (чтоб не страшно было), тоесть перед этим сделать echo '<pre>', то там будет понятно как добраться до нужной вам переменной:
    Код (Text):
    1. if ( $cat['id'] == $my_needle_id ) ...
    хочется без перебора, но видимо не получится, удобнее было бы просто
    Код (Text):
    1. echo $cats->category[$my_needle_id]->label
    но кажысь структура массивов не та
     
  5. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Ничего не соображу. Вроде бы все вполне логично:
    Код (Text):
    1. <?php  
    2.    $cats = simplexml_load_file($fileDir . 'categories.xml');
    3.    foreach ($cats->category as $cat) {
    4.       if ( $cats->category['id'] == $cat_id ) {
    5.     echo $cats->category[$cat_id]->label;
    6.       }
    7.    }
    8. ?>
    Не?
     
  6. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Так и не удалось мне ничего вывести. Прямо беда…

    Уже почти неделю не могу справиться. Товарищи, поспособствуйте решить мою проблему! Очень нужно! В остальном я вроде бы разобрался, своими силами.
     
  7. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Друзья, ну помогите решить задачу начинающему товарищу!
     
  8. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Выводите зависимости от старшей к младшей, пока не найдете ошибку
    foreach ($cats->category as $cat) {
    if ( $cats->category['id'] == $cat_id ) {
    Зачем же вам тогда $cat, если вы все равно обращаетесь к массиву категорий?
    У меня чувство, что должно быть if ($cat->attributes['id'] == $cat_id) или как-то так.
     
  9. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Спасибо, Хыиуду, вроде удалось. Вот таким образом:
    Код (Text):
    1. <h1>
    2. <?php
    3.     $cats = simplexml_load_file($fileDir . 'categories.xml');
    4.     foreach ($cats->category as $cat) {
    5.         if ((string)$cat['id'] == $_GET['catid']) {
    6.             echo $cat['label'];
    7.         }
    8.     }
    9. ?>
    10. </h1>
    Хотел только спросить. Это синтаксически верно или по-нубски? :)
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Код (PHP):
    1. <?php
    2. $xml = <<<XML
    3. <categories>
    4.    <category id="1" label="Метка" />
    5.    <category id="2" label="Метка 2" />
    6. </categories>
    7. XML;
    8. $s = new SimpleXMLElement($xml);
    9. $cat = $s->xpath("//category[@id='2']");
    10. echo $cat[0]['label'];
    11. ?>
     
  12. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    mkramer, спасибо!
    Тут еще возникла задачка. Нужно бы по-хорошему выводить имя (label) категории на странице статьи. Т. е., нужно указывать к какой категории принадлежит страница. Как то (пример):

    Флора советского Дальнего востока

    12.10.2014__________________________________Категория: Определители растений СССР
    _______________________________________________________________________________

    <!-- Контент -->

    Предыдущая конструкция сего не выводит.

    Страница со статьей выводится так:
    Код (Text):
    1. <h1><?php echo htmlentities($inner->headline); ?></h1>
    2. <div id="introduction">
    3.     <?php
    4.         if (count($inner->xpath('description'))) {
    5.             echo $hy_ru->hyphenate($inner->description, 'UTF-8');
    6.         }
    7.     ?>
    8. </div>
    9. <div id="content">
    10.     <?php
    11.         if (count($inner->xpath('text'))) {
    12.             echo $hy_ru->hyphenate($inner->text, 'UTF-8');
    13.         }
    14.     ?>
    15. </div>
    Если использовать
    Код (Text):
    1.  
    2. <?php echo htmlentities($inner->categoryid); ?>
    выводится конечно только id категории, к которой относится эта статья, т. е., в данном случае — «6».

    Подскажите, как приспособить предыдущий код (который выводит заголовок с именем категории) в данном случае?
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А сами никак не можете догадаться:
    Код (PHP):
    1. $cat = $s->xpath("//category[@id='$inner->categoryid']");
    2. echo $cat[0]['label'];
    3.  
    Естественно, в $s должен быть SimpleXMLElement с категориями
     
  14. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Простите, что-то не соображу. Можно немного подробнее :)
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Код (PHP):
    1. <?php $s = simplexml_load_file($fileDir . 'categories.xml'); ?>
    2. <h1><?php echo htmlentities($inner->headline); ?></h1>
    3. <div id='category'>
    4.     <?php
    5.      $cat = $s->xpath("//category[@id='$inner->categoryid']");
    6.      echo $cat[0]['label'];
    7.     ?>
    8. </div>
    9. <div id="introduction">
    10.    <?php 
    11.       if (count($inner->xpath('description'))) {
    12.          echo $hy_ru->hyphenate($inner->description, 'UTF-8'); 
    13.       }
    14.    ?>
    15. </div>
    16. <div id="content">
    17.    <?php
    18.       if (count($inner->xpath('text'))) {
    19.          echo $hy_ru->hyphenate($inner->text, 'UTF-8');
    20.       }
    21.    ?>
    22. </div>
     
  16. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Спасибо, mkramer — все работает.
    А первый кусок кода должен выглядеть примерно так:
    Код (Text):
    1. <?php
    2. $s = simplexml_load_file($fileDir . 'categories.xml');
    3. $cat = $s->xpath("//category[@id='catid']");
    4. echo $cat[0]['label'];
    5. ?>
    или не то совсем? Честно говоря, у меня с ним не выводится заголовок. Вот, пытаюсь сообразить как его исправить :)
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Если catid - это переменная, то перед ней должен быть $:
    Код (Text):
    1.  
    2. $cat = $s->xpath("//category[@id='$catid']");
    Прежде чем писать всякое разное, почему бы не почитать чтой-нибудь про язык, на котором пишите?
     
  18. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Да, я вот все читаю, но php дается мне с невероятной сложностью.

    Код все-таки не работает. Я о том, что был в изначальном вопросе. Вот этот:
    <?php
    Код (Text):
    1. $xml = <<<XML
    2. <categories>
    3.    <category id="1" label="Метка" />
    4.    <category id="2" label="Метка 2" />
    5. </categories>
    6. XML;
    7. $s = new SimpleXMLElement($xml);
    8. $cat = $s->xpath("//category[@id='2']");
    9. echo $cat[0]['label'];
    10. ?>
    здесь очевидно должна быть некая переменная «@id=' … '» ?
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вместо двойки - да, должна быть. А сам код я проверил - я же дал ссылку на phpfiddle, всё работает

    Добавлено спустя 3 минуты 56 секунд:
    http://phpfiddle.org/main/code/e8x8-3prh
     
  20. Linne

    Linne Активный пользователь

    С нами с:
    19 июл 2014
    Сообщения:
    44
    Симпатии:
    0
    Действительно работает :) . А у меня не желает почему-то :(. Довольно странно конечно…
     
  21. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Это нормально :) Реальность всегда сложнее, чем пример.