Procédure : personnaliser la logique d'arrivée de la racine des variantes
Lorsque vous fournissez une collection de sites dans Microsoft Office SharePoint Server 2007 et que vous configurez des variantes, Office SharePoint Server 2007 effectue les opérations suivantes :
Crée une page dans le site de la page d'accueil Variante nommée VariationRoot à l'aide du fichier de mises en page (VariationRootPageLayout.aspx) de la page maître et de la galerie des mises en page.
Remplace la page d'accueil par défaut du site de la page d'accueil Variante par la page VariationRoot.
Si vous naviguez dans la page d'accueil Variante, Office SharePoint Server 2007 recherche la propriété WelcomePage du site et exécute la page VariationRoot. Étant donné que cette page est basée sur le fichier VariationRootPageLayout.aspx, elle exécute le fichier de mise en page. La mise en page VariationRootPageLayout contient une référence à un fichier nommé VariationsRootLanding.ascx et un contrôle utilisateur qui est défini dans le fichier VariationsRootLanding.ascx. La mise en page exécute la logique dans le fichier VariationsRootLanding.ascx et redirige l'utilisateur vers un site Variante.
La logique par défaut utilisée dans le fichier VariationsRootLanding.ascx consiste à rediriger l'utilisateur vers le site Variante qui correspond au accept lang
du navigateur ou au tableau des codes de langue dans laquelle le document actuel est disponible. Le fichier VariationsRootLanding.ascx est défini dans le chemin d'accès \<Program Files>\Common Files\Microsoft Shared Debug\Web Server Extensions\12\Template\ControlTemplates
.
Si vous souhaitez que la logique d'arrivée de la racine des variantes par défaut redirige l'utilisateur vers un site Variante qui n'est pas basé sur accept lang
, vous pouvez procéder de l'une des trois manières ci-dessous. Chaque solution offre ses propres avantages et inconvénients, et vous devez les considérer avec soin avant de décider de l'approche à utiliser.
Modifiez directement le fichier VariationsRootLanding.ascx.
Il s'agit du moyen le plus rapide pour modifier la logique. Modifiez simplement la logique dans le fichier VariationsRootLanding.ascx le cas échéant, sur le système de fichiers du serveur Web frontal.
Notes
Vous devez mettre à jour le fichier VariationsRootLanding.ascx sur chaque serveur Web frontal. Toutes les collections de sites de la batterie de serveurs sont liées à la logique d'arrivée de la racine des variantes que vous spécifiez.
Copiez le contenu à partir du fichier VariationsRootLanding.ascx dans la mise en page de la page maître et de la galerie des mises en page.
Pour plus d'informations sur l'implémentation de cette approche, consultez la première procédure, Pour copier le contenu à partir du fichier VariationsRootLanding.ascx dans la mise en page. Tout comme dans l'approche précédente, cette approche fournit également un moyen de personnalisation facile et rapide grâce à une modification directe, sans compilation de DLL et sans problème de déploiement. En outre, étant donné que chaque collection de sites utilise son propre ensemble de mises en page, cette approche permet la personnalisation d'une logique d'arrivée de la racine des variantes à un niveau de collection de sites. Pour terminer cette procédure, vous devez également mettre à jour le fichier web.config sur chaque serveur Web frontal.
Avertissement
Soyez prudent pour définir l'indicateur AllowCompilation sur le fichier VariationRootPageLayout.aspx. L'utilisation d'un code en ligne signifie qu'une personne peut injecter un code malveillant dans la page.
Créez un assembly précompilé.
Pour plus d'informations sur l'implémentation de cette approche, consultez la deuxième procédure, Pour créer un assembly précompilé . Cette approche ne présente aucun risque de sécurité lié à l'ouverture d'un élément de page maître et de galerie de mises en page pour l'exécution du code en ligne. Tout comme dans l'approche précédente, la personnalisation est effectuée à un niveau de collection de sites. Toutefois, chaque fois que vous souhaitez modifier la logique d'arrivée de la racine des variantes, vous devez recompiler l'assembly. Cette approche offre donc un cycle de changement-test-déploiement moins rapide. Vous devez déployer l'assembly sur tous les systèmes de fichiers des serveurs Web frontaux.
Il existe un scénario supplémentaire que vous pouvez suivre en modifiant le code dans le fichier VariationsRootLanding.ascx. Si vous utilisez une tâche de déploiement étendue pour déployer un site Variantes et si la tâche ne déploie pas toutes les étiquettes Variante dans la hiérarchie Variante à partir de la source de déploiement, les utilisateurs qui normalement redirigent vers ces étiquettes reçoivent l'erreur 404 lors de la navigation vers la racine Variante de la destination du déploiement. Par exemple, si vous avez une étiquette dans la hiérarchie Variante qui cible un paramètre régional allemand et si cette étiquette n'est pas incluse dans votre déploiement étendu, les navigateurs définis pour préférer les paramètres régionaux allemands rencontrent l'erreur 404 lors de la navigation vers la racine Variante sur l'ordinateur de destination. La logique d'arrivée de la racine des variantes, par défaut, ne vérifie pas la validité de l'URL de redirection qu'elle choisit.
L'une des façons de résoudre ce problème consiste à modifier la logique d'arrivée de la racine des variantes pour détecter à quel moment il existe un site Web à l'URL de redirection cible. Pour savoir comment procéder, consultez la troisième procédure, Pour modifier la logique d'arrivée de la racine des variantes permettant de détecter l'existence d'un site Web.
Pour copier le contenu du fichier VariationsRootLanding.ascx dans la mise en page
Copiez le code à partir du fichier VariationsRootLanding.ascx et incorporez-le dans le fichier VariationRootPageLayout.aspx dans la page maître et la galerie de mises en page.
Apportez les modifications souhaitées.
Supprimez la référence au fichier VariationsRootLanding.ascx et à son contrôle utilisateur à partir du fichier VariationRootPageLayout.aspx.
Pour permettre l'exécution du code en ligne du fichier VariationRootPageLayout.aspx, modifiez le fichier web.config sur chaque client Web en procédant comme suit.
<SharePoint> <SafeMode ... > <!-- marks VariationRootPageLayout.aspx for ASP.NET compilation --> <PageParserPath VirtualPath= "/_catalogs/masterpage/VariationRootPageLayout.aspx" CompilationMode="Always" AllowServerSideScript="False" AllowUnsafeControls="False" IncludeSubFolders="True"/> </PageParserPaths> </SafeMode> </SharePoint>
Pour créer un assembly précompilé
Copiez le code à partir du fichier VariationsRootLanding.ascx pour créer votre propre contrôle dans vos propres DLL d'assembly.
Apportez les modifications nécessaires dans le contrôle.
Ajoutez une référence à votre contrôle dans le fichier VariationRootPageLayout.aspx de la page maître et de la galerie de mises en page.
Supprimez la référence au fichier VariationsRootLanding.ascx et à son contrôle utilisateur à partir du fichier VariationRootPageLayout.aspx.
Pour modifier la logique d'arrivée de la racine des variantes pour détecter l'existence d'un site Web
Ouvrez le fichier VariationsRootLanding.ascx.
Dans la section GetRedirectUrl(), recherchez cette ligne de code.
return (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);
Remplacez la ligne de code de l'étape 2 par le code suivant.
// Customization for handling matchedUrl not valid // (e.g., Content Deployed target Site Collection, // without source Hierarchy) matchedUrl = (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl); using (SPSite site = new SPSite(matchedUrl)) using (SPWeb web = site.OpenWeb()) { // If matchedUrl is the same as the URL of the Web // you just opened, then matchedUrl is valid if (string.Compare(matchedUrl, web.Url, StringComparison.OrdinalIgnoreCase) == 0 && web.DoesUserHavePermissions(SPBasePermissions.Open)) { //Target URL was valid; return it return matchedUrl; } else { //Target URL was NOT valid; the variation label is missing. //Perform logic here to redirect the user appropriately. //If nothing is done here, then this function returns null //and the landing behavior reverts to the //VariationsRootLandingRunTime control. //This control displays a simple error message that //indicates it could not find an appropriate subsite to //redirect to. } }
Voir aussi
Autres ressources
Variantes et sites multilingues
Procédure : personnaliser la logique des contrôles d'étiquettes de variantes