No.4548, No.4547, No.4546, No.4545, No.4543, No.4542, No.4541[7件]

🥟Re:4543◆今のところ、実装上の都合で「SITUATION:CLASS」にログイン有無のキーワードを加えられないのですが、何か良さげな実装方法を思いついた場合には考えます。ただ、おっしゃる通り、ログインしていなければ特に何も操作はできませんので、CSSが適用されなかった場合まで考慮する必要はないのではないかとは思います。
さて、スキンディレクトリ名の話ですが。なるほど、その場合は、
[[INCLUDE:head1.html]]
<link type="text/css" rel="stylesheet" href="スキン固有ファイル名.css">
[[INCLUDE:head2.html]]
……のように、ヘッダ用の共通ファイルを2つに分けて頂いて、CSSを読み込む行だけは各スキンに直接書いて頂くのが最も簡単な気がします。
なお、共通ファイルを2つに分けるのが嫌な場合は、先のJavaScriptでスキンディレクトリ名を変数 skinDirName に得ておいて、
document.write('<link type="text/css" rel="stylesheet" href="[[PATH:SKINDIR]]' + skinDirName + '.css">');
……のようなJavaScriptを使ってCSSファイルを読み込むという方法もあります。
もし、「今時 document.write はないのでは……」と思われる場合には、以下のようなモダンな書き方もできます。
let skincss = document.createElement('link');
skincss.rel = 'stylesheet';
skincss.type = 'text/css';
skincss.href = '[[PATH:SKINDIR]]' + skinDirName + '.css';
document.head.appendChild(skincss);
これで、スキンディレクトリ名のCSSファイルを読み込めます。
※JavaScriptでCSSを動的に読み込む場合は、てがろぐ側でのリンク自動調整機能が働きませんので、読み込むCSSファイルパスにはスキンディレクトリ([[PATH:SKINDIR]])も自力で加える必要があります。
畳む 325日前(火 22:35:11) 回答/返信

教えていただいたjavascriptをもとに
function getLastPart(path) {
if(path.endsWith('/')) {
path = path.slice(0, -1);
}
const parts = path.split('/');
return parts[parts.length - 1];
}
let path = "[[PATH:SKINDIR]]";
let skinDirName = getLastPart(path);
var skinDircss = document.createElement('link');
skinDircss.href = skinDirName+'.css';
skinDircss.rel = 'stylesheet';
document.head.appendChild(skinDircss);
として考えていたような出力が出来ましたのでご報告いたします。ありがとうございました! 325日前(火 22:25:15)

言葉足らずですみません、
ログイン状況を示すキーワードについてですが、
現状では [[QUICKPOST]] 記述あり+管理画面で『ログインしている際にのみ表示する』に設定でCSSで表示非表示を切り替えています
が、これだとソースには出力されているのでCSSが何らかの原因で適用されないような場合には表示されてしまうなぁというのが少し気になってしまい…
見えてしまっても非ログイン時には操作できないので気にしすぎかもしれません。
「ログインしています/していません」等のメッセージを表示したい場合はご教示いただいたjavascriptを試してみます。
スキンディレクトリ名だけが欲しいのは、
複数のスキンを共通部分(<head>~</head>間や<footer>~</footer>など)を一つにしていて各スキンで[[INCLUDE:ファイル名]]で合成して使っているのですがその時のcss名を「スキンディレクトリ名.css」としたかったためです。
CSSファイルの名前を同じ(tegalog.css)にすれば
<link type="text/css" rel="stylesheet" href="tegalog.css">
で行けるのはわかっているんですがその場合どのスキンのCSSを編集しているのかわからなくなる時があるので適用するCSSファイル名を「スキンディレクトリ名.css」として
<link type="text/css" rel="stylesheet" href="[[スキンディレクトリ名]].css">←共通ファイルに書いて各スキンでINCLUDE
みたいなことが出来たらちょっと助かるかなぁと思ったのでした。ニッチな要望ですみません。 326日前(火 21:04:00)

🧇Re:4541◆残念ながら、ログイン状況を示すキーワードはありません。ただ、この2条件が成立している状況なら、JavaScriptを使うことで判別は可能です。要は、CSSの中に .Login-Required という定義が存在するかどうかを調べれば良いので、以下のようなJavaScriptで調べられます。
for(let sheet of document.styleSheets) {
for(let rule of sheet.cssRules) {
if(rule.selectorText === '.Login-Required') {
// 非ログイン状態だと分かる
}
}
}
このJavaScriptを、QUICKPOSTの記述位置よりも後に書くか、もしくはページ読み込み完了後に実行されるように書けば、ログインされているかどうかを判別できます。
また、[[PATH:SKINDIR]]で得られる文字列から、スキンディレクトリ名だけを抜き出すには、以下のJavaScriptでできます。
function getLastPart(path) {
if(path.endsWith('/')) {
path = path.slice(0, -1);
}
const parts = path.split('/');
return parts[parts.length - 1];
}
let path = "[[PATH:SKINDIR]]";
let skinDirName = getLastPart(path));
このJavaScriptを使うと、変数 skinDirName には、スキンディレクトリ名だけが入ります。(もうちょっとスマートな方法があるかもしれませんが。^^;)
例えば、[[PATH:SKINDIR]]が/path/to/directory/なら、変数skinDirName にはdirectoryだけが入ります。
326日前(火 20:15:41) 回答/返信

①[[IF(条件): ~中身~ :IF]]に使える条件にログインしていることを示すキーワードはありますか?
②また、これは需要が少ない要望かと思いますが、スキンディレクトリ名を表示させるキーワードが欲しいです。
[[PATH:SKINDIR]]でスキンディレクトリの絶対パスが取得できますが[[NAME:SKINDIR]]のような感じでディレクトリ名だけ出せるものがあるとありがたいです。 326日前(火 18:12:18)