it-swarm.asia

كيف أقوم بإنشاء متغير يمكن لملف page.tpl.php الوصول إليه؟

في Drupal 7 ، لدي وحدة تطبق hook_node_load. وهي تنشئ متغيرًا أود استخدامه في ملف page.tpl.php الخاص بي. دعنا نتظاهر بأنه عدد العقد التي هي من نفس نوع العقدة التي تم تحميلها حاليًا. حتى الآن ، أنا فقط أجعل المتغير عموميًا ، مثل:

global $node_count;
$node_count = db_query("SELECT count FROM {node} WHERE type = :type", array(":type" => $node->type"))->fetchAll()[0]->count;

بعد ذلك ، ضمن ملف page.tpl.php ، يجب أن أفعل شيئًا مما يلي:

global $node_count;
echo "<p>$node_count</p>";

أعلم أن هناك طريقة لجعل $node_count متغير في النطاق ، بنفس الطريقة $node أو $user هم. يبدو أن الدروس التي أجدها حول هذا الموضوع تنطوي على إعادة كتابة وظيفة السمة بالكامل - أنا لا أحاول القيام بأي شيء معقد. هل هناك طريقة بسيطة لجعل هذا المتغير في النطاق في ملفات .tpl.php الخاصة بي؟ شيء مثل وظيفة؟

7
rybosome

في Drupal theming --- قالب ما قبل المعالجة هي الوظائف التي تعد المتغيرات التي يمكن استخدامها في قالب معين. يتم تنفيذ وظائف ما قبل المعالجة قالبًا تلو الآخر وتمريرها حول مصفوفة تحتوي على جميع المتغيرات. يمكنك إضافة الخاصة بك في template.php الخاص بموضوعك ، على شكل function THEMENAME_preprocess_TEMPLATENAME(&$variables) { // Your code here. }.

إذا كنت تضيف قيمة إلى كائن عقدة في تطبيق hook_node_load ، فربما يبدو هذا كالتالي:

function mymodule_node_load($nodes, $types) {
  foreach ($nodes as $node) {
    $node->myvariable = 'somevalue';
  }
}

الآن تريد الوصول إلى $ node-> myvariable في صفحتك. tpl.php. لهذا ، لا تحتاج حتى إلى كتابة وظيفة ما قبل المعالجة ، لأن Drupal يضيف بالفعل كائن العقدة الحالي إلى المتغيرات بشكل افتراضي. (يحدث هذا في template_prepocess_page .) هذا يعني أنه يمكنك ببساطة إضافة هذا إلى صفحتك. tpl.php:

<?php if ($node->myvariable): ?>
  <div class="myvariable">
    <?php print $node->myvariable; ?>
  </div>
<?php endif; ?>
6
marcvangend

يمكن تعيين المتغيرات التي يمكن الوصول إليها من ملف القالب في وظيفة ما قبل المعالجة ، والتي يمكن تنفيذها في وحدة نمطية أيضًا.

في حالتك ، يجب أن تقوم الوحدة النمطية الخاصة بك بتنفيذ التعليمات البرمجية المشابهة للرمز التالي (استبدل "mymodule" بالاسم المختصر للوحدة النمطية الخاصة بك):

function mymodule_preprocess_page(&$variables) {
  if (!empty($variables['node'])) {
    $variables['node_count'] = db_query("SELECT count FROM {node} WHERE type = :type", array(":type" => $variables['node']->type"))->fetchField();
  }
}

أنا أؤكد $variables['node'] ليس فارغًا لأن قالب الصفحة يستخدم أيضًا للصفحات غير المرتبطة بالعقدة.
في page.tpl.php ، يمكنك الوصول إلى نفس مجموعة المتغيرات من وظيفة ما قبل المعالجة باستخدام $node_count.

0
kiamlaluno