выходная переменная хранится в базе данных - PullRequest
0 голосов
/ 18 февраля 2012

Я храню содержимое страницы в таблице базы данных. Содержимое страницы также включает некоторые переменные CF (например, «... этот поставщик предоставляет услуги для # VARIABLES.vendorLocale #»).

VARIABLES.vendorLocal устанавливается на странице на основе строки URL.

Далее осуществляется доступ к CFC для получения текста соответствующей страницы из базы данных.

И это затем выводится на странице: # qryPageContent.c_content #

Но # VARIABLES.vendorLocale # отображается как есть, а не как фактическая переменная. Есть ли в любом случае получить «переменная в переменной» для правильного вывода?

Это на сервере CF9.

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Если у вас есть строка, т.е.

variables.vendorLocal = 'foo';
variables.saveMe = 'This is a string for supplier "#variables.vendorLocal#'"' ;
WriteOutput(variables.saveMe); // This is a string for locale "foo"

тогда coldfusion попытается проанализировать это для вставки любой переменной variables.vendorLocale. Чтобы обойти это, вы можете использовать строку-заполнитель, которая вряд ли будет использоваться в другом месте. Обычно вы видите [[NAME]], использованный для этой цели, поэтому в этом примере

variables.saveMe = 'This is a string for supplier "[[VENDORLOCALE]]'"' ;
WriteOutput(variables.saveMe); // This is a string for supplier "[[VENDORLOCALE]]"

Теперь у вас есть возможность потом заменить его на ваше значение

variables.vendorLocal = 'bar';
variables.loadedString = Replace(variables.saveMe,'[[VENDORLOCALE]]',variables.vendorLocal);
WriteOutput(variables.loadedString); // This is a string for locale "bar"

Надеюсь, это поможет

0 голосов
/ 22 февраля 2012

Существует множество причин, по которым хранение самого кода в базе данных является плохой идеей, но это не ваш вопрос, поэтому я не буду вдаваться в подробности. Один из способов выполнить то, что вы хотите - это взять код, который вы сохранили, в виде строки, записать временный файл, включить этот файл на страницу, а затем удалить этот временный файл. Например, вот небольшая UDF, которая реализует эту концепцию:

<cfscript>
  function dynamicInclude(cfmlcode){
    var pathToInclude = createUUID() & ".cfm";
    var pathToWrite = expandPath(pathToInclude);
    fileWrite(pathToWrite,arguments.cfmlcode);
    include pathToInclude;
    fileDelete(pathToWrite);
  }

  language = "CFML";
  somecfml = "This has some <b>#language#</b> in it";
  writeOutput(dynamicInclude(somecfml));
</cfscript>
...