2

私のクライアントは既存のバナーサイトのタイトルを持っていて、7年以上経った今、ページのバナーテキストの下にページタイトルが何であるかを引用する別の行が必要です。私は、テキスト行を追加するためにすべてのページにアクセスする必要がないように努めており、次の解決策を考え出しました。完璧ではありませんが(そうである必要はありません)、このアプローチで予期しない問題が発生しましたか?

<cfparam name="url.CurrentPage" default="">
<div id="wideheader">
<div id="wideheadermain">
    <h1 id="title">
    <div class="PageBannerText">Technology Lab
    <span id="CurrentPage"><cfswitch expression="#url.CurrentPage#">
        <cfcase value="Update">
            Update Project Data
        </cfcase>
        <cfcase value="Tracker">
            Project Tracker
        </cfcase>
        <cfcase value="ProjectLog">
            Project Log
        </cfcase>
        <cfcase value="Portfolio">
            Project Portfolio
        </cfcase>
        <cfcase value="Links">
            Related Links
        </cfcase>
        <cfcase value="Coordinator">
            Coordinator Space
        </cfcase>
        <cfcase value="Request">
            Project Request
        </cfcase>
        <cfcase value="Viewer">
            Project Tracker Read-Only
        </cfcase>
        <cfcase value="LabMgr">
            Lab Manager
        </cfcase>
        <cfcase value="Architect">
            Architect Module
        </cfcase>
        <cfdefaultcase>
            #url.CurrentPage#
        </cfdefaultcase>
    </cfswitch> #cookie.CurrentPage#</span>
        </div>
</div>
 </div>

上記のコードをヘッダーページに追加してから、メインナビゲーションメニューに次のコードを追加して、サブページのタイトルを設定します。

<ul>
    <li><a href="Proj/TrackerMenu.cfm?CurrentPage=Project Tracker">Project Tracker</a></li>
    <li><a href="Proj/RequestCopyOrAdd.cfm?CurrentPage=Request a Project">Request a Project</a></li>
    <li><a href="Proj/ViewerMenu.cfm?CurrentPage=Project Viewer">Project Viewer</a></li>
    ...
</ul>

これは完璧ではないことはわかっていますが、サイトの90〜95%をカバーすると思います。

私が持っていたもう1つのアイデアは、サブページのバナーテキストをスパンタグでラップしてIDを付け、jQUeryを使用してテキストを設定することでした。現在のURLを評価し、それに応じてサブページのバナーテキストを設定するルーチンを作成できます。

TIA

4

1 に答える 1

5

より簡単な解決策は、タイトルを構造体に格納してからルックアップを実行することです。

つまり、これをonApplicationStart内に配置します。

<cfset Application.PageTitles = 
    { 'Update'    : 'Update Project Data'
    , 'Tracker'   : 'Projet Tracker'
    ...
    , 'LabMgr'    : 'Lab Manager'
    , 'Architect' : 'Architect Module'
    }/>

(注:CF9以前を使用している場合は、=その代わりに使用する必要が:あります。CF10、およびRailoとOpenBDのすべてのバージョンは、いずれか:または=インライン構造体での使用をサポートしています。)

次に、スイッチ/ケースブロックを次のように置き換えます。

<cfif StructKeyExists(Application.PageTitles,Url.CurrentPage)>
    <cfset PageTitle = Application.PageTitles[Url.CurrentPage] />
<cfelse>
    <cfset PageTitle = Url.CurrentPage />
</cfif>

#HtmlEditFormat(PageTitle)#

メニューで似たようなものを使用できるので、複数の場所でタイトルを更新する必要はありません。

HTML /スクリプトインジェクションの可能性を防ぐために、 HtmlEditFormatを使用していることにも注意してください。

また、これをcookie変数、およびその他のユーザー指定の変数(および、HTMLを変更する可能性のある文字が含まれないことが保証されていない変数)に追加する必要があります。

于 2012-08-29T15:01:40.303 に答える