تصف هذه المقالة الحل لقالب ThinkPhP دون تحليله مباشرة كما هو. شاركه للرجوع إليه. التفاصيل كما يلي:
1. السؤال:
لقد تعلمت قالب ThinkPhP مؤخرًا ، لكنني وجدت أن صفحة القالب كانت كما كانت. بعد البحث الصعب ، وجدت أخيرًا الحل.
2. الحل:
لقد واجه الكثير من الناس نفس المشكلة. يتم استبدال أحرف __root__ و __public__ و __app__ الواردة في السلسلة المخصصة في المتغير بالمسار الحقيقي عند عرضه في القالب. أي أن هذه المشكلة تم اكتشافها عند كتابة نظام إدارة ملفات TIMI.
اقرأ رمز المصدر من الملف وإخراجه إلى الصفحة وابحث عن أنه طالما أن حرف المسار TP ، يتم استبداله بالمسار الحقيقي.
على سبيل المثال:
نسخة الكود كما يلي: $ this-> تعيين ('fileContent' ، $ fileContent) ؛ // $ fileContent يحتوي على شخصية __public__ "path".
الصفحة هي الإخراج باعتباره المسار الحقيقي /عام /.
خلال هذه الفترة ، جربت أشياء كثيرة ، مثل تشفير BASE64 عند تعيينه ، وفك تشفيره عند إخراج القالب ، لكنني وجدت أنه لم ينجح. أخيرًا ، لم أستطع إلا أن ألقي نظرة على الكود المصدري لـ TP ووجدت أنه في الخطوة الأخيرة من طريقة العرض ، قمت باستبدال "TP PATH STANTER" بالمسار الحقيقي عن طريق استدعاء طريقة العلامة. إنه طبيعي قبل طريقة العرض.
كنت أخطط في الأصل لتغيير الكود المصدري لتحقيق متطلبات أحذية الأطفال التالية:
رئيس ، هل هذا حل مؤقت أم حل نهائي؟
لكنني أعتقد أنه من الجيد إضافة حكم إلى طريقة التعيين ().
إذا كان هذا $ this-> تعيين ('' ، '' ، خطأ) ، فلن يتم استبدال المحتوى وسيكون الإخراج كما هو.
نتيجة لذلك ، بعد قراءة رمز المصدر هذا ، وجدت أنه لم يكن بهذه السهولة وأن التغييرات كانت كبيرة جدًا.
أشار الرد الأخير من حذاء أطفال آخر إلى الحل النهائي:
"يمكنك الرجوع إلى المحتوى هنا: //www.vevb.com/article/54217.htm (استبدال القالب)
مع قاعدة استبدال القالب ، سيتم استبدال جميع الأوتار __public__ على الصفحة. إذا كنت بحاجة حقًا إلى إخراج سلاسل __public__ إلى القالب ، فيمكننا إضافة قاعدة الاستبدال ، على سبيل المثال:
انسخ الرمز كما يلي: 'tmpl_parse_string' => array (
'-public--' => '__public__' ، // استخدم قواعد جديدة للإخراج/السلسلة العامة
)
بعد إضافة قاعدة الاستبدال بهذه الطريقة ، إذا كنا نريد إخراج سلسلة __public__ ، نحتاج فقط إلى إضافته-إلى القالب ، وتكون طريقة الإخراج في سلاسل الاستبدال الأخرى متشابهة.
بعد إضافة قاعدة الاستبدال بهذه الطريقة ، إذا كنا نريد إخراج سلسلة __public__ ، نحتاج فقط إلى إضافته-إلى القالب ، وتكون طريقة الإخراج في سلاسل الاستبدال الأخرى متشابهة.
لذلك ، تم إصدار الخطة:
تكوين في ملف تكوين TP config.php
انسخ الرمز كما يلي: 'TMPL_PARSE_STRING' => ARRAY (// تكوين المسار
// استعادة مسار ملف timi
'-public--' => '__public__' ،
'-app--' => '__app__' ،
'-url--' => '__url__' ،
"--'=>' __action__ '،
'-الذات-' => '________' ،
'-info--' => '__info__' ،
'-ext--' => '__ext__'
) ،
عند قراءة الرمز المصدر ، استبدل "حرف المسار الثابت" __root__ as-root--
نسخة الكود كما يلي: $ fileContent = file_get_contents ($ filepath) ؛
$ fileContent = htmlSpecialChars (preg_replace ('/__(.*؟)__/ is' ، '-$ 1-' ، $ fileContent)) ؛
ثم يتم استبدال تكوين TMPL_Parse_String عند تحليل القالب ، كما هو موضح في الشكل أدناه:
لذلك ، تم حل هذه المشكلة "مؤقتًا" و "مثالي".
آمل أن تكون هذه المقالة مفيدة لبرمجة إطار ThinkPhP للجميع.