2010-06-18 3 views
1

Mon client compte plusieurs sociétés; différents noms/logos etc, mais tous les contenus sur les sites sont identiques à l'exception desdits noms/logos.La meilleure façon de déployer un site pour deux entreprises dans ColdFusion?

Dans un environnement ColdFusion, quel est le meilleur moyen pour moi de diffuser du contenu identique et d'échanger à la volée les logos/noms d'entreprise afin de pouvoir tout conserver en un seul endroit? Est-ce une solution jQuery? regex? Ou ColdFusion va-t-il me permettre de déployer ceci de manière efficace en fonction des variables d'url et de session?

Répondre

2

Je recommanderais quelque chose de similaire à ce que @Ben Doom a suggéré; mais ne pas stocker dans la portée de la session. Au lieu de cela, je recommanderais d'utiliser la portée de l'application. Il n'y a aucune raison pour que la session de chaque utilisateur répète la même information encore et encore.

Vous pouvez obtenir 2 "applications" différentes (essentiellement des espaces d'adresses différents) s'exécutant à partir de la même base de code en leur donnant différents noms d'application. Comme Ben le suggère, je baserais le nom de l'application sur une variable CGI. L'utilisation d'un hachage garantira que la valeur sera sûre à utiliser comme nom d'application, mais ne sera pas aussi facile à allumer.

Application.cfc:

component { 
    this.name = hash(cgi.server_name); 
} 

Toutes les variables CGI sont en sécurité - certains peuvent être modifiés par l'utilisateur (referrer, ip, etc), donc si vous allez utiliser l'un des ceux, je recommande de faire quelque chose comme hachage comme je l'ai fait ci-dessus pour s'assurer qu'il est sûr d'utiliser ici ... Mais si vous utilisez l'une des valeurs sûres (comme cgi.server_name), alors vous devriez être sûr de l'utiliser sans hachage/etc

Dans ce cas, il serait beaucoup plus facile à installer le thème de l'écran pour basculer sur lequel l'application est en cours d'exécution:

Application.cfc:

component { 
    this.name = cgi.server_name; 
} 

index.cfm:

<cfimport prefix="custom" taglib="#expandPath('./layouts')#" /> 
<custom:layout theme="#application.applicationname#"> 
    <!--- your content here ---> 
</custom:layout> 

mises en page/mise en page.cfm:

<cfparam name="attributes.theme" default="www.site1.com" /> 
<cfif attributes.theme eq "www.site1.com"> 
    <!--- include content for this theme ---> 
<cfelse> 
    <!--- include content for this theme ---> 
</cfif> 

(Testé sur Win7/IIS7)

+0

Adam, merci pour les exemples de code. Je crois que cela pourrait juste me mettre sur le bon chemin. J'espère pouvoir définir certaines variables/attributs qui iront dans tout le site et remplacer tout comme les éléments de formulaire cachés, les logos et remplacer les noms de sociétés dans le texte. – Ofeargall

+0

Comme je l'ai mentionné dans mes commentaires à mon propre poste, je supposais qu'il utiliserait un déploiement de code unique, ce qui nécessiterait l'utilisation de variables de session. S'il effectue deux déploiements distincts, la portée de l'application est définitivement la solution. –

+1

Ben, mon exemple est basé sur la même base de code - un "déploiement de code unique" comme vous le dites. Les deux sites s'exécutent à partir du même code dans le même dossier. J'ai testé avec plusieurs en-têtes d'hôte (faux noms de domaine), et cela a fonctionné. –

1

Utilisez ANT script pour copier le logo correct et remplacer le nom correct lors du déploiement? Ou utiliser le support Coldbox environment detection et charger un fichier de configuration différent en fonction du chemin de l'URL?

2

"Meilleur" est un terme relatif. Il y a un grand nombre de façons de le faire.

J'utiliserais probablement un commutateur sur cgi.host_name dans la section onSessionStart() du fichier application.cfc. Stockez le nom du site, le fichier logo, la référence css, etc. appropriés dans la session et faites référence au besoin. Ceci, bien sûr, suppose que vous utilisez déjà des sessions.

Si vous voulez une réponse plus spécifique, vous devez fournir plus d'informations sur ce qui se passe déjà sur votre site.

+0

Il est '' cgi.host_name' plutôt que cgi.host_header' - aussi, si vous utilisez cette valeur dans le cadre de votre nom de l'application, vous pouvez le stocker dans la portée de l'application à la place (pas besoin de sessions). –

+0

Ben, je suis actuellement en mode développement. À l'heure actuelle, le client a des sites distincts et doit mettre à jour chaque site individuellement. Je souhaite fusionner les sites afin qu'ils soient plus faciles à gérer du point de vue de la collecte et du déploiement de données. J'espérais qu'il y avait quelque chose d'aussi direct et de la réponse d'Adam. Je vous remercie! – Ofeargall

+0

@peter - Si vous utilisez deux distributions distinctes, vous pouvez l'enregistrer dans la portée de l'application. Je supposais qu'il utiliserait une seule distribution, avec deux sites distincts pointés dessus. –

Questions connexes