Использование переменных PHP внутри области содержимого тела - PullRequest
1 голос
/ 14 марта 2011

У меня проблемы с использованием кода PHP на моих страницах в области содержимого моего тела. Я неустанно искал на этом сайте, сайте Drupal и других сайтах в целом, поэтому я прошу прощения, если ответ где-то есть на этом сайте, но я не могу его найти и мне нужна помощь.

У нас много информации, которую мы повторно используем на нашем сайте, и которую я хотел бы сохранить в файле PHP как переменные. Сейчас мы делаем это на нашем сайте, но я переписываю весь наш сайт, чтобы использовать Drupal. Так, например, мы продаем программное обеспечение, и я хотел бы иметь переменную для каждого из наших URL-адресов продуктов для различных кнопок «добавить в корзину» на сайте. Я не хочу жестко кодировать URL продукта в каждой ссылке, а вместо этого указать переменную PHP, которую я могу вызвать на любой странице drupal.

Я ничего не могу заставить работать; Я прочитал о нескольких предложениях, но ни один не работает. Я попытался установить переменные как их собственный блок, а затем вызывать их изнутри страницы, когда я создаю новую страницу. Я могу отображать переменные на страницах, но только внутри блока, внутри которого они находятся, я не могу вызвать их и заставить их отображать эхо из других блоков или областей содержимого. Я пытался использовать глобальное ключевое слово (согласно одному предложению), но у меня это не сработало.

Надеюсь, это имеет смысл. Другая информация? Я использую Drupal 6.x, у меня включен код PHP при создании страниц, у меня включен модуль фильтра PHP, я могу получить код PHP для рендеринга, чтобы я знал, что он работает, он просто не работает там, где он мне нужен будет.

Я должен сказать (если это не очевидно, просто прочитав это!), Я новичок в Drupal, поэтому, если кто-нибудь сможет помочь и попытаться объяснить свое предложение настолько просто, насколько это возможно для меня, я буду очень признателен!

Заранее спасибо.

РЕДАКТИРОВАТЬ 3/15/11

Чтобы попытаться объяснить дальше, я выложу пример кода. Я еще этого не сделал, потому что пока еще особо нечего показать, и я подумал, что это может еще больше запутать проблему.

Итак, я создал «страницу» Drupal для наших пробных загрузок программного обеспечения. Переменные PHP, которые я хочу установить, предназначены для наших ссылок на скачивание; Я хочу установить их в одном месте, чтобы, если в будущем ссылка на скачивание изменилась, мне нужно было сделать это только в одном месте. Видите ли, у нас есть ссылки для скачивания на разных страницах сайта. То же самое относится и к нашим ссылкам «купить сейчас». Вот код страницы:

<p>Try [product] free for 30 days.</p>

<!--<p>[token_custom_ewintry]</p>-->

<p><?php global $ewintry; ?><a href="<?php print $ewintry; ?>">Download for Windows PC</a></p>

<p><?php global $emactry; ?><a href="<?php print $emactry; ?>">Download for Mac OS X</a></p>

<p><?php global $ebbtry; ?><a href="<?php print $ebbtry; ?>">Download for   BlackBerry</a></p>


<?php 
$ebbtryprint = variable_get("ebbtry", "default");
print $ebbtryprint;
?>

<p><a href="<?php print $ewmtry; ?>">Download for Windows Mobile</a></p>

<p><?php global $ipewlstorelink; ?>iPhone, iPad, iPod touch owners: <a href="<?php print $ipewlstorelink; ?>">Download [product] on the iTunes App Store</a>. You'll be able to create 10 cards for free to try [product] before you buy!</p>

Для этого образца я оставил все, что я пробовал. Вы увидите мои вызовы глобальных переменных, которые никогда не работали. У меня есть глобальные переменные, определенные в пользовательском блоке, который я создал и поместил в мою область контента сверху. Я узнал, что, очевидно, ничего из этого региона на самом деле не доступно для содержимого тела моей страницы, потому что вызовы никогда не работали.

У меня есть собственный токен, который я сделал вчера с помощью модуля Tokens; это никогда не работало, но потом я прочитал в другом посте, что по умолчанию токены доступны в области содержимого тела, и мне нужен специальный фильтр. Мне еще не удалось найти фильтр, и я не уверен, что это решение когда-нибудь сработает.

У меня есть вызов variable_get. Теперь это сработало. У меня есть переменная_set, определенная на моей странице template.php. Мое значение действительно печатается с использованием вызова печати выше в моем примере кода. Однако сегодня утром я посмотрел эту страницу и не думаю, что это тот ответ, который мне нужен. Потому что теперь мне придется вызывать variable_get на всех моих страницах, прежде чем я смогу что-либо напечатать, верно? И это не решает проблему, когда я хотел, чтобы все было в одном месте, чтобы звонить куда угодно. Я попытался поместить вызов variable_get в свой пользовательский блок, но снова я не могу получить доступ к чему-либо в «верхушке содержимого» из области содержимого моего тела. Вызов variable_get выводит значение в «верхнюю часть содержимого», но затем оно не будет перепечатываться ниже значения в области содержимого.

Так что, возможно, этот код поможет кому-то мне помочь. Сейчас я подробно расскажу о CCK, поскольку это единственное предложение, которое я не пробовал. Заранее спасибо, если кто-нибудь может помочь.

Ответы [ 3 ]

1 голос
/ 14 марта 2011

Если вы пытаетесь установить глобальную переменную , а затем использовать ее в блоке функции / метода, вам нужно использовать ключевое слово global при импорте:

<?php 

// For some reason, this sometimes gives me problems
$foo = 'test';

// So I do this instead, they are equivalent
$GLOBALS['bar'] = 'test';

echo "<p>Global <br/> foo: $foo <br/> bar: $bar</p>";

function globalTest() {
    global $foo;

    echo "<p>globalTest() <br/> foo: $foo <br/> bar: $bar</p>";
}

globalTest();

function globalBarTest() {
    global $foo, $bar;

    echo "<p>globalBarTest() <br/> foo: $foo <br/> bar: $bar</p>";
}

globalBarTest();

?>

В действии: http://jfcoder.com/test/globals.php

Печать:

Global
foo: test
bar: test

globalTest()
foo: test
bar:

globalBarTest()
foo: test
bar: test

У меня всегда была привычка устанавливать глобальную переменную с помощью $ GLOBALS, у меня никогда не возникало проблем с этим.

Я бы предостерег, однако, что установка глобально изменяемых переменных считается вредной (или, по крайней мере, ненужной), поскольку их так легко случайно перезаписать где-то в вашем коде (вами и / или кем-то еще).

Ваш заявленный подход в описании звучит довольно грязно; вы должны использовать базу данных и позволить Drupal абстрагироваться от того, как вы организовываете, устанавливаете и получаете данные из хранилища данных, вместо того, чтобы редактировать ваши файлы и жестко кодировать некоторые ссылки и данные в файл PHP. Это то, о чем я думаю, читая ваше описание, что может быть нечестно, но я подумал, что мне нужно упомянуть об этом.

EDIT

В Drupal вы можете установить глобальные переменные на странице default / settings.php, используя variable_set(), а затем использовать variable_get(), чтобы получить переменную по имени.

http://api.drupal.org/api/drupal/sites--default--default.settings.php/6

variable_set('foo','bar');

http://api.drupal.org/api/drupal/includes--theme.inc/function/template_preprocess/6

function yourtemplate_preprocess (&$variables) {
    $vars['foo'] = variable_get('foo');
}

РЕДАКТИРОВАТЬ 2

Обратите внимание на источник для функции variable_set():

<?php

function variable_set($name, $value) {
    global $conf;

    $serialized_value = serialize($value);
    db_query("UPDATE {variable} SET value = '%s' WHERE name = '%s'", $serialized_value, $name);
    if (!db_affected_rows()) {
        @db_query("INSERT INTO {variable} (name, value) VALUES ('%s', '%s')", $name, $serialized_value);
    }

    cache_clear_all('variables', 'cache');

    $conf[$name] = $value;
}

?>

EDIT

Хорошо, вот что вы можете сделать:

/ друпал корень / HTDOCS / сайты / settings.php

Откройте файл settings.php и в нижней части установите переменные PHP с помощью глобальных переменных $ GLOBALS, например:

$GLOBALS['test1_variable'] = 'test 1 variable';

А затем в вашем шаблоне (с выбранным форматом ввода PHP):

<?php

echo "<p>This is my {$GLOBALS['test1_variable']}.</p>";

?>

Или ...

<p>This is my short tag <?=$GLOBALS['test1_variable'];?>.</p>

И вы должны увидеть свою переменную, напечатанную на странице из кода шаблона. Обратите внимание на фигурные скобки, окружающие переменную $ GLOBALS.

0 голосов
/ 18 марта 2011

Похоже, вы ищете модуль token_filter.Моя проблема в том, что он еще не готов (в модуле токена) для D7.

0 голосов
/ 14 марта 2011

Если вы хотите предоставить дополнительную информацию для некоторых узлов, вы должны использовать CCK для создания типа контента, который содержит все дополнительные сведения.Со стилем внутри шаблона вы можете заархивировать почти все.

Если CCK не подходит для настройки (в большинстве случаев это именно то, что вам нужно), вам нужно реализовать _preprocess_функция.Это выглядело бы как

function yourtemplate_preprocess_page(&$variables) {
  $vars['my_custom_var'] = "hello"; //anything can go here
}

Теперь у вас есть $my_custom_var в вашем файле шаблона страницы.

Обязательно ознакомьтесь с системой шаблонов Drupal (если вы еще этого не сделали).

...