web関連tips備忘録

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

スキン/テンプレート変数:phpinclude:vars


次のグローバル変数は、スキン/テンプレート変数のphpincludeによってインクルードされたファイルからアクセスできるものです:

$GATEWAY_INTERFACE
$SERVER_NAME
$SERVER_SOFTWARE
$SERVER_PROTOCOL
$REQUEST_METHOD
$QUERY_STRING
$DOCUMENT_ROOT
$HTTP_ACCEPT
$HTTP_ACCEPT_CHARSET
$HTTP_ACCEPT_ENCODING
$HTTP_ACCEPT_LANGUAGE
$HTTP_CONNECTION
$HTTP_HOST
$HTTP_REFERER
$HTTP_USER_AGENT
$REMOTE_ADDR
$REMOTE_PORT
$SCRIPT_FILENAME
$SERVER_ADMIN
$SERVER_PORT
$SERVER_SIGNATURE
$PATH_TRANSLATED
$SCRIPT_NAME
$REQUEST_URI
$argv
$argc
$PHP_SELF
$HTTP_COOKIE_VARS
$HTTP_GET_VARS
$HTTP_POST_VARS
$HTTP_POST_FILES
$HTTP_ENV_VARS
$HTTP_SERVER_VARS
$HTTP_SESSION_VARS
$PATH_INFO, $HTTPS
$HTTP_RAW_POST_DATA
$HTTP_X_FORWARDED_FOR

他の変数に関しては、'global $varname;'をきっちりとコードに加える必要があります。
NuCleus 2006-07-30(日) 17:30:37 - kei - TrackBacks

<%if()%>の応用


<%if()%>と<%else%>を組み合わせて複雑な条件分岐を実現した備忘録。
<%if(category)%>
   <%if(category,catid,35)%>
     <%MultipleCategories(grey/short,2)%>
   <%else%>
   <%if(category,catid,33)%>
     <%StickyIt(grey/short,73)%>
   <%else%>
   <%if(category,catid,28)%>
     <%ShowBlogs(grey/short,10,,0,ASC)%>
   <%else%>
     <%ShowBlogs(grey/short,5,,0,DESC)%>
   <%endif%>
   <%endif%>
   <%endif%>
<%else%>
   <%StickyIt(grey/short,73)%>
<%endif%>

カテゴリーが選択されていて、
 catidが35の場合はプラグインMultipleCategoriesで表示。
 catidが33の場合はプラグインStickyItでitem73を固定表示。
 catidが28の場合はプラグインShowBlogsで古い記事順に表示する。
 catidが35、33、28以外の場合はShowBlogsで新しい記事順に表示する。
カテゴリーが選択されていなければ、プラグインStickyItでitem73を固定表示する。
 
ポイント:入れ子にした<%if()%>の数だけ<%endif%>を並べること。
NuCleus 2006-06-23(金) 22:54:38 - kei - TrackBacks

ブログ表示画面から記事作成ができるようにする


記事を新規に作成する際、管理画面に入ってから作成するのが面倒で、記事の編集のように記事を表示している画面から新規投稿ができないものか常々思っていました。

ドキュメントに書かれている方法では、単純に記事を追加するだけでリンクを貼ったり、画像を挿入するボタンが付いておらず実用的でないのでbookmarkletのjavascriptを応用することにしました。

下記のソースをメニュー表示位置など好きなところに挿入することによって、ブログ表示画面から記事の新規作成フォームをポップアップ形式で開けるようになります。
当然のことですが、ログインしていないときはログインを促されます。

<!--add item-->
<a href="javascript:Q='';wingm=window.open('http://your blog/nucleus/bookmarklet.php?blogid=<%blogsetting(id)%>,
'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,
status=yes,resizable=yes');wingm.focus();">Add item</a>

NuCleus 2006-06-23(金) 21:07:12 - kei - TrackBacks

NP_MultipleCategoriesをカスタマイズ


画面の上、左右等、それぞれのメニューで違う形式でカテゴリーを表示できるようにカスタマイズに挑戦。
カテゴリーリスト表示パラメーターを下記のように3つ追加。
<%MultipleCategories(1,categorylist,selectid,display,cattags)%> 追加したパラメーターの説明
  1. selectid:あるカテゴリーだけを表示したい場合に、ここにカテゴリーidを書きます。複数指定したい場合は”/”区切りで指定します。 空白の場合は記事のある全てのカテゴリーを表示します。
  2. display:ここに”1”を記入すると記事の無い(サブ)カテゴリーも表示するようになります。デフォルトは空白です。
  3. cattags:画面のヘッドラインにカテゴリーを横並びで表示させるためのパラメータです。 ここに”1”を記入する、NP_MultipleCategoriesの管理エリアに書かれた<ul></ul><li></li>タグを<span></span>に変換します。 デフォルトは0です。

使用例:ヘッドラインにカテゴリーid28を記事の無いサブカテゴリーも含めて表示させたい場合は、
<%MultipleCategories(1,categorylist,28,1,1)%>
と、書きます。

追加・変更箇所
function doSKinVar()内、525行目当たり、
case 'categorylist':
$this->showCategoryList();

case 'categorylist':
$this->showCategoryList($params[3],$params[4],$params[5]);

768行目当たり、
function showCategoryList() {

function showCategoryList($selectid="", $display="", $cattags="") {
で、適当な場所に
if($selectid !=""){
$selectid = " and ( c.catid=".str_replace("/"," or c.catid=",$selectid)." ) ";
}

を挿入。

function showCategoryList内、807行目当たり、
echo TEMPLATE::fill($this->getOption('catheader'),
array(
'blogid' => $blogid,
'blogurl' => $blogurl,
'self' => $CONF['Self']
));
$query = 'SELECT c.catid, c.cdesc as catdesc, c.cname as catname FROM '.sql_table('category').' as c WHERE c.cblog=' . $blogid . ' GROUP BY c.cname ORDER BY c.cname ASC';

$cateheader = TEMPLATE::fill($this->getOption('catheader'),
array(
'blogid' => $blogid,
'blogurl' => $blogurl,
'self' => $CONF['Self']
));

echo $cateheader;

$query = 'SELECT c.catid, c.cdesc as catdesc, c.cname as catname FROM '.sql_table('category').' as c WHERE c.cblog=' . $blogid . htmlspecialchars($selectid). ' GROUP BY c.cname ORDER BY c.cname ASC';

同じく、861行目当たり
if (intval($data['catamount']) < 1) {
  continue;
}

if (intval($data['catamount']) < 1 && $display !=1) {
//記事がゼロのカテゴリーは表示しない
  continue;
}
882行目当たり、
if ($sdata['subamount'] > 0 ) {

if ($sdata['subamount'] > 0 || $display ==1) {

同じく、908行目当たり
echo TEMPLATE::fill($tp['catlist'],$data);
を下記に置き換える。
$catelist = TEMPLATE::fill($tp['catlist'],$data);
if($cattags=="0"){
$searche = array("<ul","</ul>","<li","</li>");
$replace = array("<span","</span>","<span","</span>");
  $catelist = str_replace($searche,$replace,$catelist );
}
echo $catelist;

*各行は、デバッグコードを含めた行ですのでオリジナル版には当てはまりません。
暫く動作検証してから公開する予定です。
NuCleus 2006-06-15(木) 10:42:14 - kei - TrackBacks

NP_MultipleCategoriesスキン中に<%if(subcategory)%>を使えるようにする方法(一部)


<%if(subcategory)%>を使えるようにする

nuclues/libs/SKIN.phpの448目(ver3.15の場合)当たりにある
function parse_ifのcase 'category':の後にcase 'subcategory':を追記します。
case 'category':
$condition = ($blog && $this->_ifCategory($name,$value));
break;

case 'subcategory':
if ($condition = ($catid && $blog && $blog->isValidCategory($catid))) {
$plugin =& $manager->getPlugin('NP_MultipleCategories');
if ($plugin != NULL && method_exists($plugin,"getRequestName")) {
global $subcatid;
$condition = $subcatid;
}
}
break;

これでスキン中に<%if(subcategory)%>が使えるようになります。

参照:
作者takaさんのページ
NuCleus 2006-06-13(火) 21:28:34 - kei - TrackBacks
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
LINK