سؤال

أنا أتساءل - ما هي الطريقة الأكثر فعالية لتحليل شيء مثل:

{{HEADER}}

Hello my name is {{NAME}}

{{#CONTENT}}
    This is the content ...

    {{#PERSONS}}

        <p>My name is {{NAME}}.</p>

    {{/PERSONS}}

{{/CONTENT}}

{{FOOTER}}

بالطبع يهدف هذا إلى أن يكون إلى حد ما نظامًا للقوالب في النهاية، لذا فإن خطتي هي إنشاء خريطة هاشم "لوضع فوق" القالب، كشيء من هذا القبيل

$hash = array(
    'HEADER' => 'This is a header',
    'NAME' => 'David',
    'CONTENT' => array('PERSONS' => array(array('NAME' => 'Heino'), array('NAME' => 'Sebastian')),
    'FOOTER' => 'This is the footer'
    );

ومن الجدير بالذكر أن "الأقسام" (العلامات التي تبدأ بـ #) يمكن أن تتكرر أكثر من مرة، وأعتقد أن هذا ما يزعجني ...

كما أن أي قسم يمكن أن يحتوي على أي عدد من الأقسام الأخرى، والعلامات العادية...

لذا..كيف فعلت ذلك؟

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

المحلول

هل الانتاج المتوقع من هذا شيئا مثل:

وهذا هو رأس

ومرحبا اسمي ديفيد

This is the content ...

My name is Heino.

My name is Sebastian.

وهذا هو تذييل


وكيف حالك إدارة العلاقة بين صفوف متداخلة في الخريطة التجزئة إلى أقسام للتكرار في القالب؟ ما هو السلوك الفعلي للقالب من المفترض أن تكون؟ إذا تم توفير مجموعة لعنصر غير القسم، ما ستفعل؟ إذا تم توفير عنصر القسم قيمة واحدة، فإنه يعامل نفس صفيف سوى عنصر واحد (أفترض ذلك)؟

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

ومخطط من مخطط الدولة ومعرفة ما لكل دولة، ثم ترميز الدخول والخروج الخاص بك النقاط التي في هيكل الدعوة بين الرموز. في النهاية كنت تريد أن تسفر عن جمع enumerable ل الرموز التي تصف القالب.

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

وعلى أمل أن يساعد.

نصائح أخرى

الطريقة الأكثر فعالية هي أن ترجمة القالب إلى كود php.و فقط يشمل النسخة المجمعة.

ال محرك القالب الذكي يفعل شيئا مماثلا.يمكنك أيضًا إلقاء نظرة على المصدر الذكي والتحقق من كيفية تحليل العلامات.

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

واود ان اذهب مع محلل طرف ثالث لأنني أحب العمل أكثر ذكاء وليس أصعب، ولكن إذا كنت تفعل ذلك باعتباره ممارسة أو إذا كنت تريد حقا لبناء قالب المحرك الخاص بك (في PHP أفترض بسبب علامة )، وأود أن تبدأ مع مراجعة أنماط التصميم، وrel="nofollow نمط تصميم مركب على وجه التحديد.

ويستخدم نمط مركب الكثير في إطار جافا لمثل هذه الاشياء بما في ذلك تحليل XML.

وأود أن استخدام شيء من هذا القبيل داخل ملف منفصل. فب:

<?php echo $HEADER ?>

Hello my name is <?php echo $NAME?>

<div id="CONTENT">
    This is the content ...

    <?php foreach ($PERSONS as $PERSON) : ?>

        <p>My name is <?php echo $PERSON['NAME']?>.</p>

    <?php endforeach ?>

</div>

<?php echo $FOOTER ?>

وتشمل فقط الملف أعلاه داخل واحد حيث يتم ملؤها المتغيرات المشار إليه.

وصدقوا أو لا تصدقوا، PHP يوفر بالفعل جميع الميزات التي النموذجيه الأنظمة هناك يدعون لتنفيذها. ليست هناك حاجة لإضافة طبقة أخرى من التجريد (والتعقيد) على رأس PHP.

PHP في DOM للحصول على هذا. لغتي القالب هو ببساطة HTML مع سمات ID والطبقة. إذا كنت تريد أن العصا مع خطتك، على الرغم من أنني كنت تستخدم preg_replace_callback مع نمط يطابق جملة و دالة رد أن يجد البديل المناسب في تجزئة الخاص بك، تطلق على نفسها بشكل متكرر على عناصر الحاوية.

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