これは長々と続きますが、知識のあるチャップの 1 人がトレーニングするのは簡単なはずです。
動的ログイン リンクを含む DotNetNuke Web ページがあります。ログインしていない場合、リンクは「ログイン」となり、ログイン ポップアップへの適切な URL が表示されます。ログインしている場合、リンクは「ログアウト」になり、同様に、ログアウトを処理する Web ページへの適切な URL があります。
ログインしているかどうかをページが判断すると、onclick="return dnnModal.show('http://blahblah.com....') の属性で HTML リンクが作成されます。
これを行うコード:
loginLink.Attributes.Add(" onclick", "return " + UrlUtils.PopUpUrl(loginLink.NavigateUrl, this, PortalSettings, true, false, 200, 550));
リンクが何であれ、ID とクラスは常に同じままです。私の問題は、ログインテキストを画像に置き換えたいということです。実際には、ログインとログアウト用に別の画像を使用しています。ここでの問題は、ID とクラスが同じままであるため、通常のように CSS を介して行うことはできませんが、属性に基づいてクラスのスタイルを設定できたことです。HTML リンクの作成の出力を見つけて、たとえば「href」属性に基づいてクラスをスタイリングすることで、これをテストしました。
a #dnn_dnnLogin_loginLink .LoginLink [href="http://some very very long dynamically created URL.aspx"]{ styles here }
これに関する問題は、現在表示しているページに基づいてログイン/ログアウト リンクが変わることです。
レンダリングされた 2 つのオプションのそれぞれに、スタイルを設定できる固有の属性があり、それが「テキスト」属性であることは知っています。では、この属性を追加して HTML でレンダリングし、CSS でスタイルを設定できるようにするにはどうすればよいでしょうか?
次のようないくつかのバリエーションを試しました。
loginLink.Attributes.Add(" onclick", "return " + UrlUtils.PopUpUrl(loginLink.NavigateUrl, this, PortalSettings, true, false, 200, 550) " Text", + loginLink.Text);
レンダリングされるものが次のようになることを期待して:
onclick="return dnnModal.show('http://localhost/CPD/tabid/87/ctl/Login/Default.aspx?returnurl=%2fCPD.aspx&popUp=true',/*showReturn*/true,200,550,true,'')" Text="Login"
だから私はスタイルを整えることができました:
a #dnn_dnnLogin_loginLink .LoginLink [Text="Login"]{styles here}
a #dnn_dnnLogin_loginLink .LoginLink [Text="Logout"]{styles here}
しかし、代わりに一般的なエラーが発生します。行を書くさまざまな方法を試しましたが、成功しませんでした。構文がわかりません。
誰かが私を正しい方向に向けることができますか? これが私の最初の問題に対する本当に簡単な解決策になるので、間違ったツリーを吠えていないことを願っています。
ありがとう、
編集 - ページ全体のコードが役立つ場合は?
using System;
using System.Web;
using System.Web.UI;
using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.Services.Localization;
using DotNetNuke.UI.Modules;
namespace DotNetNuke.UI.Skins.Controls
{
public partial class Login : SkinObjectBase
{
private const string MyFileName = "Login.ascx";
public string Text { get; set; }
public string CssClass { get; set; }
public string LogoffText { get; set; }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
if (!String.IsNullOrEmpty(CssClass))
{
loginLink.CssClass = CssClass;
}
if (Request.IsAuthenticated)
{
if (!String.IsNullOrEmpty(LogoffText))
{
if (LogoffText.IndexOf("src=") != -1)
{
LogoffText = LogoffText.Replace("src=\"", "src=\"" + PortalSettings.ActiveTab.SkinPath);
}
loginLink.Text = LogoffText;
}
else
{
loginLink.Text = Localization.GetString("Logout", Localization.GetResourceFile(this, MyFileName));
}
loginLink.NavigateUrl = Globals.NavigateURL(PortalSettings.ActiveTab.TabID, "Logoff");
}
else
{
if (!String.IsNullOrEmpty(Text))
{
if (Text.IndexOf("src=") != -1)
{
Text = Text.Replace("src=\"", "src=\"" + PortalSettings.ActiveTab.SkinPath);
}
loginLink.Text = Text;
}
else
{
loginLink.Text = Localization.GetString("Login", Localization.GetResourceFile(this, MyFileName));
}
string returnUrl = HttpContext.Current.Request.RawUrl;
if (returnUrl.IndexOf("?returnurl=") != -1)
{
returnUrl = returnUrl.Substring(0, returnUrl.IndexOf("?returnurl="));
}
returnUrl = HttpUtility.UrlEncode(returnUrl);
loginLink.NavigateUrl = Globals.LoginURL(returnUrl, (Request.QueryString["override"] != null));
if (PortalSettings.EnablePopUps && PortalSettings.LoginTabId == Null.NullInteger)
{
loginLink.Attributes.Add(" onclick", "return " + UrlUtils.PopUpUrl(loginLink.NavigateUrl, this, PortalSettings, true, false, 200, 550));
}
}
}
catch (Exception exc)
{
Exceptions.ProcessModuleLoadException(this, exc);
}
}
}
}