Coldfusion-Лучший способ скрыть URL-адреса на страницах с помощью CFSWITCH? - PullRequest
1 голос
/ 10 июля 2011

Я хочу построить фреймворк, который скрывает URL-адреса, и я только изучаю CFSWITCH.Навигационные ссылки запрашиваются в datatable.Я попытался выполнить запрос по cfswitch и продолжаю получать сообщение об ошибке

Пример:? Category = 5 & page = 21 (где category = page_category и 5 = page_categoryid, а page_id page = 21 в datatable)

<cfoutput query="pagecategories" group="page_categoryid">
   <cfswitch expression="#URL.category#">
      <cfcase value="21">
         <cfinclude template="../templates/index_welcome.cfm">
      </cfcase>

      <cfcase value="#page_categoryid#">
         <cfinclude template="../templates/page_bycategory.cfm?page_categoryid=#page_categoryid#">
      </cfcase>

      <cfcase value="22">
         <cfinclude template="/modules/blog/">
      </cfcase>
   </cfswitch>
</cfoutput>

1 Ответ

8 голосов
/ 11 июля 2011

Во-первых, добро пожаловать в ColdFusion, это отличный язык, думаю, вам понравится.:)

То, что вы пытаетесь здесь, является действительно плохой идеей по ряду причин, читайте дальше, почему и некоторые альтернативы.

1) это напрасно скрывает это от вас, разработчика.Поверьте мне, вы научитесь ненавидеть это через 6 месяцев, когда вернетесь к каким-то произвольным изменениям и не сможете вспомнить, что означает «14».

2) это плохо для поисковых систем - URL-адреса Google SESдля получения дополнительной информации (поисковая система безопасна).

3) цифровые увеличивающиеся ключи менее защищены , чем описательные тексты.Я могу просто переключаться между цифрами и просматривать все ваши страницы, пропуская навигацию и просматривая все.

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

Вместо того чтобы поступать так, как вы перечислили, произвольные числа, которые ссылаются на разные элементы, - почему бы вместо этого не ввести их вместо реальных строк, имеющих значения?Если то, что вы пытаетесь выполнить, - это скрытие фактических имен страниц, обрабатывающих запрос, то почему бы вместо этого не использовать что-то вроде этого:

http://www.domain.com/?/category/blog/page/links

вместо:

http://www.domain.com/page.cfm?category_id=21&page=5

В моемНапример, я не указываю на фактический каталог, я собираюсь взять параметр cgi.querystring (который будет содержать строку "/category/blog/page/links") и проанализировать его и сопоставить со значениями ключа.(см. функции списка Coldfusion: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_13.html, используйте «/» в качестве разделителя).Затем я могу использовать любую логику для категории «блог» и «ссылки на страницу», которая может храниться в базе данных точно так же, как «21» и «14».:)

Теперь перейдем к вашему коду ...

Что касается оператора switch, он просто работает как набор операторов if:

<cfswitch expression="value_to_check">
<cfcase value="possible_value_1">
    <!--- do something --->
</cfcase>
<cfcase value="possible_value_2,another_possible_value">
    <!--- do something different --->
</cfcase>
<cfdefaultcase>
    <!--- if none of the above, do this --->
</cfdefaultcase>
</cfswitch>

У вас также есть некоторые странности в вашем включении.Вы не можете указать какие-либо параметры URL в операторе <cfinclude>.Думайте об этом как о буквальном получении кода со страницы, которую вы указали, и вставке его в документ.Это именно так, не больше, не меньше.Поэтому вы не можете указать параметры URL.Это неверно:

<cfinclude template="../templates/page_bycategory.cfm?page_categoryid=#page_categoryid#">

Кроме того, это довольно ненормально для выражения case иметь динамическое значение, например:

<cfcase value="#page_categoryid#">

Дайте мне знать, если у вас есть какие-либо вопросы / потребностиуточнение

...