SQLの窓

2018年10月18日


PHP の imap 関数( Windows のローカル )で、さくらインターネットのメールボックスの情報を取得する

Sylpheed( Windows メールクライアント ) で、INBOX のフォルダの中にさらにフォルダを作成して読み出しています



<?php
error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT );
session_cache_limiter('nocache');
session_start();

header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: application/json; charset=utf-8" );

# デバッグログの初期化
file_put_contents("debug.log", "開始\n" );

mb_internal_encoding("UTF-8");

xlog("ログの出力");

# ***************************
# IMAP 接続
# ***************************
$con = @imap_open("{さくらサーバ:993/imap/ssl}INBOX", "アカウント", "パスワード");
if ( $con === FALSE ) {
	print imap_last_error();
	xlog(imap_last_error());
	exit();
}

// メールボックスのリストを読み込み、各ボックスに関する詳細な情報を返す
$mbox = imap_getmailboxes( $con, "{さくらサーバ}", "*" );
xlog("\n■■■ \$mbox_info 現在のメールボックスに関する情報 -------");
xlog( print_r( $mbox ,true ));

if( $mbox == FALSE ) {
	xlog( "imap_getmailboxes に失敗しました" );
	exit();
}

# ***************************
# デリミタ取得( サーバ依存 )
# ***************************
$delimiter = $mbox[0]->delimiter;

# ***************************
# フォルダ情報の配列
# ***************************
foreach ($mbox as $obj) {

	// サーバー文字列を削除して
	// 日本語を含むフォルダをデコード
	$obj->name = imap_mutf7_to_utf8( str_replace( "{さくらサーバ}", "", $obj->name ) );

	// . が無い場合は、ルートのメールボックス
	if ( strstr($obj->name,".") !== FALSE ) {

		// フォルダパスの分解
		$data = explode( $delimiter, $obj->name );

		// 先頭はメールボックス
		$mailbox = $data[ 0 ];

		// 先頭より下を再度連結する
		$name = "";
		for( $i = 1; $i < count( $data ); $i++ ) {
			if ( $i > 1 ) {
				$name .= ".";
			}
			$name .= $data[ $i ];
		}

		// フォルダのメールボックス以下の階層
		xlog( $mailbox . " のフォルダ名 : " . $name );

	}

}

// ***************************
// IMAP 接続解除
// ***************************
imap_close($con);

// ***************************
// デバッグ用 JSON出力
// ***************************
print json_encode($mbox, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );

// ***************************
// ログ出力
// ***************************
function xlog($message) {
	file_put_contents("debug.log", "{$message}\n" , FILE_APPEND );
}
?>


JSON の内容
[
    {
        "name": "INBOX.メールアイテム格納用.階層テスト",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.メールアイテム格納用",
        "attributes": 32,
        "delimiter": "."
    },
    {
        "name": "INBOX.Drafts",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.Trash",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.spam",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.Sent",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.Draft",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX",
        "attributes": 40,
        "delimiter": "."
    }
]
log の内容
開始
ログの出力

■■■ $mbox_info 現在のメールボックスに関する情報 -------
Array
(
    [0] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.&MOEw,DDrMKIwpDDGMOBoPH0NdSg-.&lo5cZDDGMLkwyA-
            [attributes] => 64
            [delimiter] => .
        )

    [1] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.&MOEw,DDrMKIwpDDGMOBoPH0NdSg-
            [attributes] => 32
            [delimiter] => .
        )

    [2] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Drafts
            [attributes] => 64
            [delimiter] => .
        )

    [3] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Trash
            [attributes] => 64
            [delimiter] => .
        )

    [4] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.spam
            [attributes] => 64
            [delimiter] => .
        )

    [5] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Sent
            [attributes] => 64
            [delimiter] => .
        )

    [6] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Draft
            [attributes] => 64
            [delimiter] => .
        )

    [7] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX
            [attributes] => 40
            [delimiter] => .
        )

)

INBOX のフォルダ名 : メールアイテム格納用.階層テスト
INBOX のフォルダ名 : メールアイテム格納用
INBOX のフォルダ名 : Drafts
INBOX のフォルダ名 : Trash
INBOX のフォルダ名 : spam
INBOX のフォルダ名 : Sent
INBOX のフォルダ名 : Draft
posted by lightbox at 2018-10-18 11:49 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

Sylpheed( Windows メールクライアント ) で さくらインターネットのメールを IMAP で受信する

新規アカウントの作成

さくらインターネットのメールで事前にアカウントを作成しておきます



IMAP4 を選択

IMAP は、サーバにデータを保存しています。



アカウント情報を入力



サーバ情報を入力



情報の確認



ログイン

パスワードは、アカウントの設定より登録できます。



受信処理

現在のアカウントを登録したアカウントに変更して、受信処理を行います
( 全受信はすべてのアカウントです )



メールアイテム格納用というフォルダは、他のメールクライアントで作成したものです。




posted by lightbox at 2018-10-18 10:30 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2018年10月17日


PHP : IMAP 関数 でまずメールのヘッダ部分を整理してログに出力する / ※ JSON 出力を追加

本文は、マルチパートや添付ファイルなので、頭を切り替えて考える必要があります。とりあえずいろんなメールアカウントから、さくらインターネットのメールに転送してテストしました。

結果はすべて debug.log へ出力します。

データ取得後の管理の為、UID を取得して付加しています。

▼ PHP マニュアルより imap_uid
UID はユニークな ID であり時間が経過しても変わりません
<?php
error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT );
session_cache_limiter('nocache');
session_start();
header( "Content-Type: text/html; charset=utf-8" );

# デバッグログの初期化
file_put_contents("debug.log", "開始\n" );

mb_internal_encoding("UTF-8");

xlog("ログの出力");

# ***************************
# IMAP 接続
# ***************************
$con = @imap_open("{サーバ:993/imap/ssl}INBOX", "ユーザ", "パスワード");
if ( $con === FALSE ) {
	print imap_last_error();
	xlog(imap_last_error());
	exit();
}

// 現在のメールボックスに関する情報を得る
$mbox_info = imap_mailboxmsginfo( $con );
xlog("\n■■■ \$mbox_info 現在のメールボックスに関する情報 -------");
xlog( print_r( $mbox_info ,true ));

if( $mbox_info->Nmsgs == 0 ) {
	xlog( "メールメッセージがありません" );
	exit();
}

// ***************************
// メッセージ件数
// ***************************
$max = $mbox_info->Nmsgs;
xlog("【メッセージ件数:{$max}】" );

if ( $max > 100 ) {
	$max = 100;
}

// メールの主要データの集約
$mail = array();

// ***************************
// $max 〜 1
// 最新から表示
// ***************************
for( $i = $max; $i >= 1; $i-- ) {

	// ***************************
	// 全ヘッダーデータ
	// ***************************
	$mail_head = imap_header($con, $i);
	// アドレス

	xlog( "▼▼▼ \$mail_head このメールのヘッダデータ ({$i}番目) ▼▼▼" );
	// 【UID】を取得して、$mail_head に追加
	$mail["head"][$i]["UID"] = imap_uid( $con, $i );
	$mail["head"][$i]["Msgno"] = $mail_head->Msgno;

	xlog( print_r( $mail_head ,true ) );

	// ***************************
	// from : テキストと メールアドレス( アドレスのみの場合もある )
	// ***************************
	xlog("■■■ fromaddress (decode 前) -------");
	xlog( $mail_head->fromaddress );

	// ***************************
	// ASCII と それ以外で分解
	// ***************************
	$fromaddress = imap_mime_header_decode( $mail_head->fromaddress );
	xlog("■■■ fromaddress (decode 後) -------");
	xlog( print_r( $fromaddress, true ) );

	$mail["head"][$i]["fromaddress"] = "";
	foreach( $fromaddress as $key => $value ) {
		if( $value->charset != 'default' ) {
			$mail["head"][$i]['fromaddress'] .= mb_convert_encoding($value->text,'UTF-8',$value->charset);
		}
		else{
			$mail["head"][$i]['fromaddress'] .= $value->text;
		}
	}
	xlog("■■■ fromaddress (編集後) -------");
	xlog( $mail["head"][$i]['fromaddress'] );
	xlog("");

	// ***************************
	// subject : 件名
	// ***************************
	xlog("■■■ subject (decode 前) -------");
	xlog( $mail_head->subject );

	// ***************************
	// ASCII と それ以外で分解
	// ***************************
	$subject = imap_mime_header_decode( $mail_head->subject );
	xlog("■■■ subject (decode 後) -------");
	xlog( print_r( $subject, true ) );

	$mail["head"][$i]["subject"] = "";
	foreach( $subject as $key => $value ) {
		if( $value->charset != 'default' ) {
			$mail["head"][$i]['subject'] .= mb_convert_encoding($value->text,'UTF-8',$value->charset);
		}
		else{
			$mail["head"][$i]['subject'] .= $value->text;
		}
	}
	xlog("■■■ subject (編集後) -------");
	xlog( $mail["head"][$i]['subject'] );
	xlog("");

	// ***************************
	// 受信日時
	// ***************************
	$data = $mail["head"][$i]['date'] = $mail_head->date;
	$data = $mail["head"][$i]['date_normal'] = date('Y-m-d H:i:s', strtotime($data));

	// ***************************
	// サイズ
	// ***************************
	$data = $mail["head"][$i]['size'] = $mail_head->Size;

	$mail["head"][$i]["mail_head"] = $mail_head;

}

xlog("■■■ 編集後データの一覧 -------");
xlog( print_r( $mail["head"], true ) );


// ***************************
// IMAP 接続解除
// ***************************
imap_close($con);

// ***************************
// ログ出力
// ***************************
function xlog($message) {
	file_put_contents("debug.log", "{$message}\n" , FILE_APPEND );
}
?>
OK



json 文字列を出力して Ajax で使用できるように変更
<?php
error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT );
session_cache_limiter('nocache');
session_start();

header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: application/json; charset=utf-8" );

# デバッグログの初期化
file_put_contents("debug.log", "開始\n" );

mb_internal_encoding("UTF-8");

xlog("ログの出力");

# ***************************
# IMAP 接続
# ***************************
$con = @imap_open("{さくらユーザ.sakura.ne.jp:993/imap/ssl}INBOX", "ユーザ@さくらユーザ.sakura.ne.jp", "パスワード");
if ( $con === FALSE ) {
	print imap_last_error();
	xlog(imap_last_error());
	exit();
}

// 現在のメールボックスに関する情報を得る
$mbox_info = imap_mailboxmsginfo( $con );
xlog("\n■■■ \$mbox_info 現在のメールボックスに関する情報 -------");
xlog( print_r( $mbox_info ,true ));

if( $mbox_info->Nmsgs == 0 ) {
	xlog( "メールメッセージがありません" );
	exit();
}

// ***************************
// メッセージ件数
// ***************************
$max = $mbox_info->Nmsgs;
xlog("【メッセージ件数:{$max}】" );

if ( $max > 100 ) {
	$max = 100;
}

// メールの主要データの集約
$mail = array();

$json = array();

// ***************************
// $max 〜 1
// 最新から表示
// ***************************
for( $i = $max; $i >= 1; $i-- ) {

	$obj = new stdClass();

	// ***************************
	// 全ヘッダーデータ
	// ***************************
	$mail_head = imap_header($con, $i);
	// アドレス

	xlog( "▼▼▼ \$mail_head このメールのヘッダデータ ({$i}番目) ▼▼▼" );
	// 【UID】を取得して、$mail_head に追加
	$mail["head"][$i]["UID"] = imap_uid( $con, $i );
	$mail["head"][$i]["Msgno"] = $mail_head->Msgno;

	xlog( print_r( $mail_head ,true ) );

	// ***************************
	// from : テキストと メールアドレス( アドレスのみの場合もある )
	// ***************************
	xlog("■■■ fromaddress (decode 前) -------");
	xlog( $mail_head->fromaddress );

	// ***************************
	// ASCII と それ以外で分解
	// ***************************
	$fromaddress = imap_mime_header_decode( $mail_head->fromaddress );
	xlog("■■■ fromaddress (decode 後) -------");
	xlog( print_r( $fromaddress, true ) );

	$mail["head"][$i]["fromaddress"] = "";
	foreach( $fromaddress as $key => $value ) {
		if( $value->charset != 'default' ) {
			$mail["head"][$i]['fromaddress'] .= mb_convert_encoding($value->text,'UTF-8',$value->charset);
		}
		else{
			$mail["head"][$i]['fromaddress'] .= $value->text;
		}
	}
	xlog("■■■ fromaddress (編集後) -------");
	xlog( $mail["head"][$i]['fromaddress'] );
	xlog("");

	$obj->fromaddress = $mail["head"][$i]['fromaddress'];


	// ***************************
	// subject : 件名
	// ***************************
	xlog("■■■ subject (decode 前) -------");
	xlog( $mail_head->subject );

	// ***************************
	// ASCII と それ以外で分解
	// ***************************
	$subject = imap_mime_header_decode( $mail_head->subject );
	xlog("■■■ subject (decode 後) -------");
	xlog( print_r( $subject, true ) );

	$mail["head"][$i]["subject"] = "";
	foreach( $subject as $key => $value ) {
		if( $value->charset != 'default' ) {
			$mail["head"][$i]['subject'] .= mb_convert_encoding($value->text,'UTF-8',$value->charset);
		}
		else{
			$mail["head"][$i]['subject'] .= $value->text;
		}
	}
	xlog("■■■ subject (編集後) -------");
	xlog( $mail["head"][$i]['subject'] );
	xlog("");

	$obj->subject = $mail["head"][$i]['subject'];


	// ***************************
	// 受信日時
	// ***************************
	$data = $mail["head"][$i]['date'] = $mail_head->date;
	$data = $mail["head"][$i]['date_normal'] = date('Y-m-d H:i:s', strtotime($data));

	// ***************************
	// サイズ
	// ***************************
	$data = $mail["head"][$i]['size'] = $mail_head->Size;

	$mail["head"][$i]["mail_head"] = $mail_head;

	$json[] = $obj;

}

xlog("■■■ 編集後データの一覧 -------");
xlog( print_r( $mail["head"], true ) );


// ***************************
// IMAP 接続解除
// ***************************
imap_close($con);

print json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );

// ***************************
// ログ出力
// ***************************
function xlog($message) {
	file_put_contents("debug.log", "{$message}\n" , FILE_APPEND );
}
?>




posted by lightbox at 2018-10-17 10:17 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2018年10月15日


CSS の @media screen と IFRAME を使用して PC コンテンツとスマホページを完全に別作成して切り替える

PC コンテンツとスマホページを純粋に CSS で切り替えるには、表示画面の設計がとても難しくなります。コンテンツ量が基本的には同量になるのを両立させるのは単純では無いと思います。

なので、本来のレスポンシブデザインでは無いですが、既存の PC ページへスマホページを追加する方法として、IFRAME を PC ページの中に展開するのが簡単です。

必要な HTML と CSS は以下のようなものになり、中身のサーバサイドの作成方法は昔ながらのリファレンスや、エージェント文字列で行います。

一番のポイントは、IFRAME をブラウザに fit させるのに必要な、html,body { height: 100%; } です。
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">

<style>
html,body {
	height: 100%;
}
@media screen and ( min-width:480px ) {
	#container {
		display: block;
	}
	#ssub {
		display: none;
	}
}

@media screen and ( max-width:479px ) {

	#container {
		display: none;
	}
	#ssub {
		display: black;
		width: 100%;
		height: 100%;
	}

}
</style>
</head>
<body>
<div id="container">

<!-- ここに PC 用のコンテンツを表示する -->

</div>

<!-- ここに スマホ 用のコンテンツを表示する -->
<iframe id="ssub" src="スマホ専用ページ"></iframe>
<!-- スマホ専用ページはこのページより参照されない場合はこのページを展開する -->
<!-- ( このページとスマホ専用ページは同一 URL で作成 ) -->
</body>




posted by lightbox at 2018-10-15 10:31 | WEBブラウザ | このブログの読者になる | 更新情報をチェックする

2018年10月14日


Ruby(mechanize) で Seesaa のエクスポート



さくらインターネットに mechanize をインストールしても、https が動かないので Windows10 で mechanize をインストールして実行しています。

Windows10 に mechanize のインストールも、C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb を以下のリンク先のように変更する必要があります。

Sets a default pool size for Windows as Process::RLIMIT_NOFILE is not supported
# ▼ エラー
DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4

# ▼ 変更
if Gem.win_platform? then 
  DEFAULT_POOL_SIZE = 256
else
  DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
end

引数は、cgi に引き渡される(cgi['no'])ので、#{cgi['no']} で文字列内に埋め込んで展開させます。

seesaa_backup.rb

Windows では、STDOUT が crlf で出力される為、Seesaa からの出力と同じにする為に、冒頭で STDOUT.binmode を実行しています。
# Seesaa エクスポート

STDOUT.binmode

# CGI 用
require "cgi"
cgi = CGI.new

# ヘッダを出力( ダウンロード用に application/octet-stream と ファイル名 )
puts "Content-Type: application/octet-stream; charset=utf-8"
puts "Content-Disposition: attachment; filename=export.log"
puts "Expires: Thu, 19 Nov 1981 08:52:00 GMT"
puts "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
puts "Pragma: no-cache"
puts

# Mechanize 用
require 'mechanize'
agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

# ログインページ
page = agent.get("https://ssl.seesaa.jp/pages/welcome/login/input")
# FORM 要素の name 属性で参照
form = page.form_with(:name => 'authpost')

# FORM 要素内の入力
form["member__email"] = "メールアドレス"
form["password"] = "パスワード"

# FORM 要素を使用して送信
page = form.submit

# ここでログインが完了するので、目的のページへ移動する

# 対象ブログのページ( デフォルトで新規投稿へ移動 )
page = agent.get("http://blog.seesaa.jp/cms/home/switch?blog_id=#{cgi['no']}")

# エクスポートページへ移動
page = agent.get('http://blog.seesaa.jp/cms/tools/mt/export/input')

# このページの1番目の FORM
form = page.forms[0]

# この FORM で送信
page = form.submit

# 結果をブラウザに出力
print page.body


関連する記事


posted by lightbox at 2018-10-14 19:00 | Ruby 2018 | このブログの読者になる | 更新情報をチェックする

2018年10月09日


Oracle : sqlplus で、テーブルの create 文( DBMS_METADATA.GET_DDL ) と csv データを出力する

create 文の作成は、DBMS_METADATA.GET_DDL で行います。
※ 94 DBMS_METADATA

sqlplus 内のコマンドについては、SETシステム変数の一覧 を参照して下さい

USER_ALL_TABLES の内容は、ALL_ALL_TABLES を参照して下さい

build_create.sql

sqlplus ユーザ/パスワード@識別子 @build_create
SET LONG 2000000
SET LINESIZE 32767
SET PAGESIZE 0
SET TRIMSPOOL ON
SET FEEDBACK OFF
SET TERMOUT OFF
SPOOL create.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_ALL_TABLES u WHERE u.TABLE_NAME in ('社員マスタ','得意先マスタ');
SPOOL OFF

SPOOL 社員.csv
SELECT 社員コード||','||氏名||','||フリガナ||','||所属||','||性別||','||作成日||','||更新日||','||給与||','||手当||','||管理者||','||生年月日 from 社員マスタ;
SPOOL OFF

EXIT


取得した create table 文

  CREATE TABLE "LIGHTBOX"."得意先マスタ"
   (	"得意先コード" NVARCHAR2(4),
	"得意先名" NVARCHAR2(50),
	"得意先区分" NVARCHAR2(1),
	"担当者" NVARCHAR2(4),
	"郵便番号" NVARCHAR2(7),
	"住所1" NVARCHAR2(100),
	"住所2" NVARCHAR2(100),
	"作成日" DATE,
	"更新日" DATE,
	"締日" NUMBER(2,0),
	"締日区分" NUMBER(1,0),
	"支払日" NUMBER(2,0),
	"備考" NVARCHAR2(100),
	 PRIMARY KEY ("得意先コード")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "LIGHTBOXAREA"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "LIGHTBOXAREA"


  CREATE TABLE "LIGHTBOX"."社員マスタ"
   (	"社員コード" NVARCHAR2(4),
	"氏名" NVARCHAR2(50),
	"フリガナ" NVARCHAR2(50),
	"所属" NVARCHAR2(4),
	"性別" NUMBER(1,0),
	"作成日" DATE,
	"更新日" DATE,
	"給与" NUMBER,
	"手当" NUMBER,
	"管理者" NVARCHAR2(4),
	"生年月日" DATE,
	 PRIMARY KEY ("社員コード")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAUL
T)
  TABLESPACE "LIGHTBOXAREA"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAUL
T)
  TABLESPACE "LIGHTBOXAREA"





posted by lightbox at 2018-10-09 18:22 | Oracle | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり