سؤال

ولقد وجدت عدة طرق للتعامل مع العودية في هندى، تستند في معظمها على القوالب بما في ذلك في أنفسهم، والذي يبدو مثل النفايات المضحكة من الموارد. لقد وجدت حل واحد، من خلال Messju في أكثر من هندى التي تبدو وكأنها مجرد حق - ولكن غير معتمد وفشل في أحدث نسخة من هندى: (

لالناس يتساءلون: ما أريد هندى لطباعة هو موضوع النقاش الذي تم تعريفه من قبل مجموعة من الإدخالات. إذا إدخال واحد أو أكثر من الأجوبة، يتم سرد تلك كأطفال لوقال الدخول في صفيف، وهلم جرا.

array(
    array(
        'id'=>0,
        'headline'=>"My parent headline",
        'body'    =>"My parent body",
        'children'=>array(
            array(
                'id'=>1,
                'headline'=>"My firstChild headline",
                'body'    =>"My firstChild body",
                'children'=>array()
            ),
            array(
                'id'=>2,
                'headline'=>"My secondChild headline",
                'body'    =>"My secondChild body",
                'children'=>array()
            )
        )
    ),
);

وومجموعة متداخلة لها عمق التعسفي، وسوف كل إدخال عدد التعسفي للأطفال. بالنسبة لي هذا شيء أريد أن أفعله مع ضمن نطاق القالب، وأرى أن من منطق العرض النقي. أنا لا أريد أن يكون للتعامل مع HTML أو أي نوع من النائبة HTML خارج القالب.

وأريد هندى لطباعة هذه القوائم كما المتداخلة:

<ul>
    <li>
        <h1>My parent headline</h1>
        <p>My parent body</p>
        <ul>
            <li>
                <h1>My firstChild headline</h1>
                <p>My firstChild body</p>
            </li>
            <li>
                <h1>My secondChild headline</h1>
                <p>My secondChild body</p>
            </li>
        </ul>
    </li>
</ul>

وأنا بدأت لتحقيق هذا قد يكون هناك مشكلة ذاتها كل حالة على حدة، بحيث الرقم الأول سوف مجرد كتابة المساعد زقحان للتعامل مع هذا على وجه التحديد، على الرغم من أنني كنت بدلا من أن يكون حلا شاملا حولها.

هل هناك طريقة؟

هل كانت مفيدة؟

المحلول

و"من أجل فهم العودية، يجب أن نفهم أولا العودية ..."

والمزاح فقط. وهذا ينبغي أن تفعل ما تريد:

<?php
/*
* Smarty plugin
* ————————————————————-
* File:     function.recurse_array.php
* Type:     function
* Name:     recurse_array
* Purpose:  prints out elements of an array recursively
* ————————————————————-
*/

function smarty_function_recurse_array($params, &$smarty)
{

if (is_array($params['array']) && count($params['array']) > 0) {
   $markup = '';

   $markup .= '<ul>';

   foreach ($params['array'] as $element) {
      $markup .= '<li>';

      $markup .= '<h1>' . $element['headline'] . '</h1>';
      $markup .= '<p>' . $element['body'] . '</p>';

      if (isset($element['children'])) {
         $markup .= smarty_function_recurse_array(array('array' => $element['children']), $smarty);
      }

       $markup .= '</li>';
   }

   $markup.= '</ul>';

   return $markup;

} else {
   return 'not array';
}
}

ووضع الملف في هندى الخاص بك / المحمول مجلد. تعيين مجموعة لهندى ثم يطلق عليه في القالب الخاص بك مثل ذلك:

{recurse_array array=$data}

وهنا البرنامج التعليمي لطيفة لجعل العرف وظائف هندى:

إنشاء هندى مخصص ظائف

ويكون على بينة من التبعية أن هذا المثال يحتوي على بنية البيانات الأساسية الخاصة بك. أيضا، أن نضع في اعتبارنا أن مجموعة طويلة بشكل غير عادي أو متداخلة بعمق من البيانات يمكن أن تكون بطيئة حقا. إدارة تعقيد الخاص بك، والحفاظ على الأشياء موثقة جيدا، ويجب أن يكون على ما يرام. حظا سعيدا!

نصائح أخرى

ومع هندى 3، وهذا يمكن أن يتم ذلك باستخدام {وظيفة}. سوف التعليمة البرمجية التالية ينتج ouput المطلوبة.

{function name=printList}
<ul>
    {foreach $items as $item}
    <li>
        <h1>{$item['headline']}</h1>
        <p>{$item['body']}</p>
        {if $item['children']}
            {call name=printList items=$item['children']}
        {/if}
    </li>
    {/foreach}
</ul>
{/function}

{call name=printList items=$comments}
يمكن العثور

ومزيد من المعلومات في مستندات .

ملاحظة جانبية: لمجرد شيء معقد أو متداخل وهذا لا يعني أنه لا يمكن أن يكون داخل القالب. في سبيل الله بنية لى المجاهدين HTML غير متكررة بشكل طبيعي، ويختبئون بعيدا أو نقله إلى مكان آخر (لمجرد أنها معقدة للغاية لالقالب) الذي نعرضه على تعقيد إضافي في التطبيق.

وقد ترغب في النظر في إنشاء وظيفة مخصصة / معدل / المساعد لهندى. تمرير مجموعة إلى وظيفة مخصصة جنبا إلى جنب مع تحديد ما هو القالب يجب استخدام وظيفة. إذا كان بهذه البساطة، فقط لإدراج النص إلى مكان معين، تحميل القالب في وظيفة وعمل PHP مع القالب باستخدام regexes / str_replace / ...

وأو تفعل ذلك مباشرة في PHP دون استخدام القوالب هندى، لأن كل ما تحتاجه هو H1، المجاهدين، لي والعلامات ص وتغيير استخدام تخطيط CSS.

وأو إذا كنت قلقا من النفقات العامة مع فتح وإغلاق الملفات في هندى، وتقدير ما هو مقدار المستويات في 90٪ من الحالات، وخلق القالب الذي سوف تغطي هذه 90٪. لالعودية استخدام الراحة قبل بما في ذلك القالب نفسه ...

وأفضل طريقة هي عدم القيام بذلك.

ويفترض الذكية لتكون بسيطة. هذا لا يبدو ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top