2014-01-14 5 views
0

Моя страница возвращает два запроса в зависимости от просматриваемой страницы:Как сохранить имя запроса в переменной и использовать его позже?

QueryA и QueryB

я определить, какие страницы вы смотрите, а затем я хочу, чтобы динамически изменять код CF использовать правильное имя запроса как (пример pesudo-код), например:

<cfif GetBaseTemplatePath() EQ #ExpandPath('view.cfm')#> 
    <cfset QryName = QueryA> 
    <cfelseif GetBaseTemplatePath() EQ #ExpandPath('edit.cfm')#> 
    <cfset QryName = QueryB> 
    </cfif> 

<cfoutput> #QryName.Forename# #QryName.Surname# etc etc </cfoutput> 

Очевидно, что вышеупомянутое не работает, потому что QryName является переменной не stucture. Так что мне действительно нужно снова создать структуру для хранения запроса или есть ли более простой способ переключения имени?

+0

Что вы подразумеваете под "не работает"? Какая ошибка? Потому что на основе предоставленной информации - если я не пропущу что-то - это должно работать так, как вы этого хотите. –

+0

Ну, это говорит о том, что вы пытаетесь использовать переменную в качестве структуры ... –

+0

Если у вас есть ошибки, отправьте EXACT-сообщение (то есть: скопируйте и вставьте с экрана), включая контекст (фрагмент кода, который будет выводиться, где он точно определяет, что такое ошибка) и первые несколько строк трассировки стека. –

ответ

2

Поскольку вы пытаетесь понять, что происходит, ...,

Вы имели Версия 1:

<cfset QryName = 'QueryA'> 

и изменил его до версии 2:

<cfset QryName = QueryA> 

Version 1 фактически сделал то, что вы сказали, что хотите сделать, скопируйте имя запроса в переменную. Версия 2 создала указатель на фактический объект запроса. Другими словами, он «скопировал исходный запрос по ссылке». Если бы вы придерживались своего первоначального плана, вы могли бы преуспеть. Вам пришлось бы использовать ассоциативную запись массива. Вот пример кода, который я только что проверил, чтобы убедиться, что он работал до того, как я разместил этот ответ.

<cfquery name="abc" datasource="dw"> 
table event 
</cfquery> 
<cfset def = "abc"> 

Это eqivalent для вашей версии 1. С помощью этой новой переменной, я могу сделать что-то вроде этого:

<cfdump var="#variables[def]#" metainfo="no"> 
<cfdump var="#variables[def].recordcount#" metainfo="no"> 

Или даже это, что то, что вы пытаетесь:

<cfoutput>#variables[def]['event_name'][1]#</cfoutput> 

Обратите внимание, что буквы def не указаны. Однако, если я хочу использовать эту переменную в cfoutput тег, я должен процитировать их:

<cfoutput query="#variables['def']#"> 
#event_name#<br /> 
</cfoutput> 

Есть ситуации, в которых этот метод более подходит к задаче. Глядя на ваш вопрос, ваш, вероятно, не один из них.

+0

спасибо, что очень информативный я ценю, что вы нашли время, чтобы объяснить это! –

0

Это работает. У меня были котировки в моем коде по ошибке, например. <cfset QryName = 'QueryA'>, которого я не видел.

0

Если я правильно понимаю ваш вопрос, это звучит так, как будто ваша корневая проблема заключается в том, что вы не используете среду MVC. Какой запрос запускать и куда отправлять пользователя - это то, что контроллер будет обрабатывать для вас.

+0

Хотя это более подходит в качестве комментария, репутация плаката слишком низка для этого. Обычно я выдерживаю в этих ситуациях, чтобы человек мог публиковать комментарии, но я не буду на этот раз, потому что я не согласен с тем, что он сказал. –

Смежные вопросы