web関連tips備忘録

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |

エディタにHTML特殊文字のコンバート機能ボタン追加


アイテムの追加・編集
エディタに機能ボタン追加
を参考にIEに加え、Firefoxでも変換できるようにします。
手順
1. blog/nucleus/libs/PAGEFACTORY.phpの315行目、function parse_jsbuttonbar($extrabuttons = "")内の
case 0:
$this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");の上(case 0:内ならどこでも良い)下記のコードを挿入します。

$this->_jsbutton('entities',"entitiesThis()","特殊文字変換");

同じコードを case2: にも追記します。350行目当たり。
case 2:
$this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");の上(case 2:内ならどこでも良い)下記のコードを挿入します。

$this->_jsbutton('entities',"entitiesThis()","特殊文字変換");

2. blog/nucleus/javascript/edit.jsの108行目当たり(本当は、どこでも良い)、function boldThis() { insertAroundCaret('',''); }の下に下記のコードを挿入します。

function entitiesThis() { entitiesCaret('<', '>'); }

つづいて、entitiesCaret()ファンクションを259行目当たりにある function insertAroundCaret (textpre, textpost) の下(本当は、どこでも良い)に新設します。

// the selected text to entities

function entitiesCaret (textpre, textpost) {
  var textEl = lastSelected;

if (textEl && textEl.createTextRange && lastCaretPos) {
var caretPos = lastCaretPos;
caretPos.text = caretPos.text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
} else if (!document.all && document.getElementById) {
var txtarea = document.getElementById('input' + nonie_FormType);
text = getCaretText();
newtext = text.replace(/&/g, '&').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
mozeEntitesReplace(txtarea, newtext);
} else {
//konquerorの場合の一時しのぎ&lt;( '<' )と&lt;( '>' )を文末に付け足す
document.getElementById('input' + nonie_FormType).value += textpre + textpost;
}

updAllPreviews();
}

更に、313行目当たりにあるfunction mozReplace()ファンクションを参考にしてmozeEntitesReplace()ファンクションを新設します。

function mozeEntitesReplace(txtarea, newText) {
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
var s1 = (txtarea.value).substring(0,selStart);
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + newText + s3;
}


3. アイコンbutton-entities.gifを適当に作って blog/nucleus/imagesにアップして完了です。

button-entities.gif:HTML特殊文字のコンバート機能

以上。
コアファイルのカスタマイズは、バージョンアップする際に往生します。なんとか対応を考えねば・・・
NuCleus 2005-06-24(金) 20:14:42 - kei - TrackBacks

NP_TitleListプラグインのカスタマイズ


既存のNP_TitleListプラグインは、アイテム個別表示では使用できないので、アイテム個別表示でも使用できるようするには下記のようにします。

NP_TitleList.phpの111行目当たり

function doSkinVar内の
switch ($skinType) {
case 'index':

switch ($skinType) {
case 'index':
case 'item': ←追加
にします。

NuCleus 2005-06-17(金) 19:16:44 - kei - TrackBacks

NP_TitleListプラグインの使用方法


タイトル一覧を表示させたいスキンに下記の要領でパラメータを書きます。
<%TitleList%>
<%TitleList(,で区切ってオプションのパラメーターを記入)%>
例、 <%TitleList(itemlink,15,0,0,,ASC)%>
↑テンプレートitemlinkを使って、1ページ当たり15件を投稿日時が古い順にリストアップする。ページスイッチおよび選択フォームは表示しない。

スキンパラメーターの記述方法
<%TitleList(mode,template,amount,navitype,form,bmode,sort,monthlimit)%>

mode:アーカイブの表示のモードで、'month'で月単位、'day'で日単位になる。デフォルトは月単位。

template:プラグイン付属のテンプレート以外のテンプレートを使用する場合に、そのテンプレート名を書く。

amount:1ページあたりの初期表示数。デフォルトは50。

navitype;ページスイッチ(ページ切り替え用ナビゲーション)の表示形式
0 : ページスイッチを表示しない
1 : Prev/Nextのみ表示
2 : phpBB風。こんな感じ→Per page: | 1 . | 2. | 3. |・・・・次

form:カテゴリーやアーカイブ、並び順などの選択フォームを表示するかどうか。
0 : 表示しない
1 : 表示する(デフォルト)

bmode:複数のblogのアイテムを表示するためのパラメーター。
 省略:現在のblogのアイテムだけを表示する。
 "all":全てのblogのアイテムを表示。
 blogIDをスラッシュ区切りで書く:希望するlogのアイテムを表示したいとき。
 "<>blogID":表示させたくないblogID。複数ある場合はスラッシュ区切りで書く。

カテゴリーのセレクトフォームの選択肢をカテゴリーではなくブログにしたい場合は、このパラメーターの先頭に"bselect:"と付ける。

<%TitleList(grey/short,50,2,1,bselect:2/3,ASC)%>
<%TitleList(50,0,0,bselect:<>2/3,ASC)%>

sort:表示順。
 ASC : 日時昇順
 DESC : 日時降順(デフォルト)

monthlimit:表示対象とする月数。
 1年分を表示対象にしたい場合は12と書く。

参考:
作者(Taka)さんのページ
NuCleus 2005-06-17(金) 19:07:37 - kei - TrackBacks

管理画面から表示していたアイテムにジャンプさせたい


Nucleus管理画面からログアウトやサイトの確認を行ったときにログイン前に表示していたURLにジャンプさせる方法。

各アイテムの表示画面で、戻り先として自身のURLをクッキーに保存しておいて、管理画面のログアウトとサイトの確認のリンク先を保存しておいたURLに設定します。

設定手順

  • 各スキンの「メインの目次ページ」、「個別アイテムページ」の先頭(1行目)に以下を追記します。
    <%phpinclude(/blog/nucleus/modorisaki.php)%>
  • modorisaki.phpの内容を以下のようにします。
    setcookie("modorisaki",$_SERVER['REQUEST_URI'],null,"/");
    *modorisaki.phpの名前や保存するディレクトリーは任意です。
  • ADMIN.phpのカスタマイズ(行数はver3.21の場合)
    4530行目当たり、
    $baseUrl = htmlspecialchars($CONF['AdminURL']);の下に以下を挿入。
    if($_COOKIE['modorisaki'])
      $modorisaki = $_COOKIE['modorisaki'];
    else
      $modorisaki = $CONF['IndexURL'];

    4561行目当たりの
    ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a>"

    ." - <a href='$modorisaki?action=logout'>" . _LOGOUT. "</a>"
    に、
    4566行目当たりの
    echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a>";

    echo "<a href='".$modorisaki."'>"._YOURSITE."</a>";
    に変更します。


NuCleus 2005-05-30(月) 08:40:30 - kei - TrackBacks

nucleusでphplibを利用したアクセス制限ページでのエラー解消方法


現象:
nucleus実験ページでphplibを利用したアクセス制限ページを実現できるか試したところ、認証を通過したページの最後に
「Table 'DB名.active_sessions' doesn't exist」というエラーが出ます。

対処方法:
nucleusとphplibが使用しているデーターべースが違うのが原因のようです。
ログインフォームで認証を通過してセッションを記録しようとactiv_sessionテーブルを呼びますが,認証を通過した時点でnucleusのデータベースに切り替わっているため、上記のエラーがでるものと思われます。

.htaccessで自動的に追加しているclose.incを呼ばないよにします。
例:file_name以外であればclose.incを追加します。
<FilesMatch "[^file_name]">
php_value auto_append_file "close.inc"
</FilesMatch>

上記の場合、phplibで呼び出すファイルが1つのため、close.incを追加しなくても問題ないですが、複数ページでは検証できていません。
phplibで呼び出すnucleusアイテムが複数の場合セッションデータが記録されないことを考えると???ですが、認証後、nucleusのアイテムからインクルードしたphplibのDBを操作しても正常に動作しています。

正しくは、phplibとnucleusのデーターベースを同じDBにする方が最善の策と思います。
NuCleus 2005-03-09(水) 07:40:21 - kei - TrackBacks
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
LINK