SQLの窓

2013年05月30日


Win8 ストア : UrlEncode と UrlDecode

System.Net.WebUtility を使用します。( Windows8 のサンプルコードの 『Push and periodic notifications client-side sample』内にある Helper.cs に使用例が少しあります ) 

内部コードにあわせて、UTF8 のみ文字列のまま変換できますが、他のキャラクタセットではいったんバイト配列に変換して処理する必要があります。
// Shift_JIS で UrlEncode された文字列
string str_sjis_urlencode = "%93%FA%96%7B%8C%EA%95%5C%8E%A6";
// バイト配列に変換
byte[] sjis_data1 = Encoding.GetEncoding("SHIFT_JIS").GetBytes(str_sjis_urlencode);
// バイト配列状態で UrlDecode
byte[] sjis_data2 = WebUtility.UrlDecodeToBytes(sjis_data1, 0, sjis_data1.Length);
// バイト配列を内部コード表現の文字列に戻す
string sjis_data3 = Encoding.GetEncoding("SHIFT_JIS").GetString(sjis_data2, 0, sjis_data2.Length);
Debug.WriteLine("Shift_JIS:" + sjis_data3);

// Shift_JIS の UrlEncode に変換したい文字列
str_sjis_urlencode = "日本語表示";
// バイト配列に変換
sjis_data1 = Encoding.GetEncoding("SHIFT_JIS").GetBytes(str_sjis_urlencode);
// バイト配列状態で UrlEncode
sjis_data2 = WebUtility.UrlEncodeToBytes(sjis_data1, 0, sjis_data1.Length);
// バイト配列を内部コード表現の文字列に戻す
sjis_data3 = Encoding.GetEncoding("SHIFT_JIS").GetString(sjis_data2, 0, sjis_data2.Length);
Debug.WriteLine("Shift_JIS:" + sjis_data3);

// UTF8 で UrlEncode された文字列
string str_utf8_urlencode = "%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A1%A8%E7%A4%BA";
string str_urldecode = WebUtility.UrlDecode(str_utf8_urlencode);
Debug.WriteLine("UTF8:" + str_urldecode);

// UTF8 で UrlEncode したい文字列
str_urldecode = "日本語表示";
str_utf8_urlencode = WebUtility.UrlEncode(str_urldecode);
Debug.WriteLine("UTF8:" + str_utf8_urlencode);


以下定義の表示
#region アセンブリ System.Runtime.Extensions.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.Extensions.dll
#endregion

using System;

namespace System.Net
{
	// 概要:
	//     Web 要求の処理時に URL をエンコードおよびデコードするためのメソッドを提供します。
	public static class WebUtility
	{
		// 概要:
		//     HTTP 伝送用に HTML エンコードされている文字列を、デコードされた文字列に変換します。
		//
		// パラメーター:
		//   value:
		//     デコードする文字列。
		//
		// 戻り値:
		//     デコードされた文字列。
		public static string HtmlDecode(string value);
		//
		// 概要:
		//     文字列を、HTML エンコードされた文字列に変換します。
		//
		// パラメーター:
		//   value:
		//     エンコードする文字列。
		//
		// 戻り値:
		//     エンコードされた文字列。
		public static string HtmlEncode(string value);
		//
		public static string UrlDecode(string encodedValue);
		//
		public static byte[] UrlDecodeToBytes(byte[] encodedValue, int offset, int count);
		//
		public static string UrlEncode(string value);
		//
		public static byte[] UrlEncodeToBytes(byte[] value, int offset, int count);
	}
}


posted by lightbox at 2013-05-30 20:37 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

2013年05月27日


Android ADT : AsyncTask コードの取り出し( 匿名のインナー型 でその場で実行する )

AsyncTask は、abstract class です。継承して新たにクラスを作って処理するものだとは思いますが、AsyncTask が本来その場で書くつもりのものを非同期で処理する必要にせまられて仕方なく使うので、このような書き方でも動作すれのであれば、簡単に済ませられるので良いのでは無いかと思っています。

※ 取り急ぎ、実装したい場合はとにかく他の参照も final で設定しなおせば中で使えます。

まず、new Async とタイプして、CTRL+SPACE で候補の中の『匿名のインナー型』を選択します。



以下のように、ジェネリッククラスとしての型の引数が説明になっています



そこから、本来の型を設定して( 後から変更するのであれば、<Void,Void,Void> でもいいです)から、ブロック内にカーソルを持っていきます。



※ 『型』はインポートしている必要があるので、ここでは Drawable をインポートします



メニューの『ソース』から、メソッドのオーバーライド/実装 を選択して、必要なメソッドを選択します



処理ブロックが完成します



最後に必要な引数を execute メソッドに渡します



実際の実装コード

Android 4.2.2 : インターネット上の画像の表示 / AsyncTask<String, Void, Drawable>



posted by lightbox at 2013-05-27 16:51 | Android | このブログの読者になる | 更新情報をチェックする

Android ADT : ボタンのクリックコードの取り出し

最初の setOnClickListener を候補から取り出して、以下の状態になります。



その後、カーソル位置に new をタイプして CTRL+SPACE で次の候補を出して選択するとほぼ完成。



最後の行にセミコロンを追加すると完成です。





posted by lightbox at 2013-05-27 16:29 | Android | このブログの読者になる | 更新情報をチェックする

Android 4.2.2 : インターネット上の画像の表示 / AsyncTask<String, Void, Drawable>



Android SDK の変わり目( 4.0.3 ) で、AsyncTask を使うようになりましたが、わざわざクラスを作成するほどの処理でも無い場合は、以下のように『無名クラス』で実行すると簡単です
package com.example.httpimageview;

import java.io.InputStream;
import java.net.URL;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     
        // 画面定義上の View を ID から取得して、目的のクラスでキャスト
        Button button = (Button)this.findViewById(R.id.button1);
        // 引数が、onClickListener インターフェイスの setOnClickListener を実行  
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Log.i("button", "クリックされました");
				
				String url = "https://lh3.googleusercontent.com/-0ZRziQFtS9E/UKuFllC5bVI/AAAAAAAAJm0/4cP6WwTLoSk/s800/dl_de772d3b5ed4837976694426a015383f.jpg";
				String option = "引渡しテスト";
				
				// Android 非同期処理用『無名』クラス
				// String は、doInBackground
				// Void は、Progress 用( ここでは未使用 )
				// Drawable は、doInBackground の戻り値でかつ、onPostExecute の引数
				new AsyncTask<String, Void, Drawable>() {

					// 非同期処理
					@Override
					protected Drawable doInBackground(String... params) {
						// params は、可変長引数
						Log.i("button", params[0]);
						Log.i("button", params[1]);
						
						Drawable img_data = null;

			    		try {
			    			// インターネット上の画像をバイナリで取得して、Drawable に変換
				    		URL url = new URL( params[0] );
				    		InputStream is = (InputStream)url.getContent();
				    		img_data = Drawable.createFromStream(is, "");
			    		}
			    		catch(Exception e) {
			    			Log.i("button", e.getMessage());
			    		}						
						return img_data;
					}

					// 画面描画用
					@Override
					protected void onPostExecute(Drawable result) {
						
						if ( result != null ) {
							// imageView1 には、プロジェクト内のリソースを初期表示しているので、
							// null でなかった場合のみ表示変更
							ImageView imageView = (ImageView)findViewById(R.id.imageView1);
							imageView.setImageDrawable(result);
						}
					}
					
				}.execute(url,option);	// クラス作成後メソッドを実行
				
			}
		});
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

     <Button
         android:id="@+id/button1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_alignParentTop="true"
         android:text="画像表示" />

     <ImageView
         android:id="@+id/imageView1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/button1"
         android:layout_below="@+id/button1"
         android:src="@drawable/ic_launcher" />

</RelativeLayout>
関連する記事

Android ADT : ボタンのクリックコードの取り出し

Android ADT : AsyncTask コードの取り出し( 匿名のインナー型 でその場で実行する )



posted by lightbox at 2013-05-27 16:20 | Android | このブログの読者になる | 更新情報をチェックする

2013年05月26日


Win8 ストア : HttpClient + XDocument で RSS の取得

実際画面表示する場合、ビジュアル的に解りやすいので NAVER の RSS を使用しています。

一般的な DOM のメソッドを使用したい場合は、XmlDocument を使用し、http の呼び出しも XmlDocument の LoadFromUriAsync(static) で読み込む事ができますが、要素や属性の取り出しは XDocument がシンプルで簡単ですし、Framework 4.0( Visual Studio 2010 ) でも共通して使えるのでおすすめです。

EnsureSuccessStatusCode メソッドは特別に呼び出す必要はなさそうですが、ドキュメントの表現からするとメモリをきちんと破棄できるようなニュアンスで書かれています( 実際のところを確かめる術はありませんが )。また手順としては、そもそも IsSuccessStatusCode が False の時にスローされるそうなので、直後で処理を中断しています。

XDocument は、余計な null チェック等が必要無いようなので、手軽にバインド用クラスにデータを追加するのに使用すると良いと思います。
private async void loadRss()
{

	var httpClient = new HttpClient();
	HttpResponseMessage response = null;
	try {
		response = await httpClient.GetAsync("http://matome.naver.jp/feed/hot");
	}
	catch (Exception ex)	{
		Debug.WriteLine(ex.Message);
	}
	// 接続に失敗
	if (response == null)	{
		return;
	}

	try {
		// HTTP 応答が成功しなかった例外をスローします。
		// Content が nullでない場合このメソッドは
		// マネージとアンマネージ リソースを解放するために 
		// Dispose を呼び出します。
		response.EnsureSuccessStatusCode();
	}
	catch (Exception ex)	{
		Debug.WriteLine(ex.Message);
	}
	// HTTP 応答の失敗
	if (!response.IsSuccessStatusCode)	 {
		Debug.WriteLine("StatusCode : " + response.StatusCode);
		return;
	}

	// 内容を文字列として取得
	var string_xml = await response.Content.ReadAsStringAsync();
	// XDocument を作成
	XDocument dom = XDocument.Parse(string_xml);

	// 参照用の名前空間を作成
	XNamespace xn_dc = "http://purl.org/dc/elements/1.1/";
	XNamespace xn_media = "http://search.yahoo.com/mrss/";

	var items = dom.Descendants("item");
	foreach (var item in items) {
		Debug.WriteLine(item.Element("title").Value);
		Debug.WriteLine(item.Element("link").Value);
		Debug.WriteLine(item.Element("matome_view").Value);
		Debug.WriteLine(item.Element("favorite").Value);
		Debug.WriteLine(item.Element("description").Value);
		Debug.WriteLine(item.Element("pubDate").Value);
		Debug.WriteLine(item.Element("guid").Value);
		// 名前空間を持つ要素の参照
		Debug.WriteLine(item.Element(xn_dc + "creator").Value);
		Debug.WriteLine(item.Element(xn_dc + "date").Value);
		// 名前空間を持つ要素の参照から、属性の参照
		Debug.WriteLine(item.Element(xn_media + "thumbnail").Attribute("url").Value);
		Debug.WriteLine(item.Element(xn_media + "content").Attribute("url").Value);
	}

}
Microsoft のドキュメント

HttpClient クラス
HttpResponseMessage クラス

XmlDocument Class


タグ:xml HTTP Windows8
posted by lightbox at 2013-05-26 00:16 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

2013年05月19日


Win8 ストア : リストボックス テンプレート

SkyDrive へ移動

ダウンロードしたテンプレートは、『C:\Users\ユーザー名\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#\Windows Store』に保存します。

Windows Store フォルダは最初は存在しないので作成します( 好きな名前のフォルダでも Visual Studio から利用できます )
左側のリストボックスをタップ(クリック)すると、右側のリストボックスが変化します。バインド元のデータを更新してリストボックスの表示に反映させる為に、アプリケーションバーの『設定』を実行します。 ソースコード表示 仕様 ❶ Page.Resources で XAML 内で利用する文字列とListBox 用の DataTemplate を定義 ❷ テキストエリアを設置( リストボックス内の内容を入力して更新 ) ❸ AppBar を XAML で定義 (ボタンを左側2つ、右側2つ定義) ❹ それぞれのボタンにイベントを定義 ❺ ListBox のデータバインド用に ListMain、ListItem、ListItem2 クラスListBox のタップイベントを別のソースコードに定義( partial ) ❼ TextResource.cs に、StaticResource 用のクラスを定義 ❽ デザイン時の表示用に ListMainDesignData.xaml を用意 プロジェクト用固定文字列と ListBox 用テンプレート
<Page.Resources>
	<local:TextResource
		x:Key="GlobalText"
		PageTitle="ListBox テンプレート"
		AppName="lightbox サンプルアプリケーション" />

	<!-- ListBox 用ビジュアル定義 -->
	<DataTemplate
		x:Key="ListBox2Item">
		<StackPanel
			Margin="0,0,0,4"
			Width="432"
			Height="45">
			<TextBlock
				Text="{Binding id}"
				TextWrapping="Wrap" />
			<TextBlock
				Text="{Binding name}"
				TextWrapping="Wrap"
				Margin="12,-6,12,0"
				FontSize="24" />
		</StackPanel>
	</DataTemplate>

</Page.Resources>

ListBox(繰り返しコントロール) 特有のもの

DataTemplate
リストボックスの表示部分の XAML 定義を DataTemplate として定義しておいて、ListBox 側の属性定義で実装しています( ItemTemplate="{StaticResource ListBox2Item}" )

DataContext
データバインドの大元となる ListMain クラスは、MainPage クラスでインスタンスを作成して、ListBox の DataContext に設定しています。XAML 側では、『ItemsSource="{Binding Items}"』でバインドされますが、実際の明細データは、Items の中に入る ListItem2 クラスが使用されます。

デザイン時のデータ定義
デザイン時に、ListBox の表示が可能なように、XAML 定義でデータ用のクラスを定義して、MainPage の XAML で設定しています。『d:DataContext="{d:DesignData ListMainDesignData.xaml}"
posted by lightbox at 2013-05-19 20:16 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

2013年05月17日


Visual Studio のテンプレートフォルダの自由な作成

普通にインストールすると、ユーザのドキュメント内に Visual Studio のユーザ部品がインストールされますが、例えば C# では、『C:\Users\ユーザ名\Documents\Visual Studio 201X\Templates\ProjectTemplates\Visual C#』内に自由にフォルダを作成してそこにテンプレートを保存すると以下のように反映されます 





posted by lightbox at 2013-05-17 10:39 | VS(C#) | このブログの読者になる | 更新情報をチェックする

XAML コードを横に長く表示させずに、属性毎に縦に表示させる設定

『ツール』メニューのオププションからオプションダイアログを表示させて、『テキストエディター』から XAML を選択して、『書式設定』の『行間』まで入って、以下のように設定します



あと、『XAMLの全般』に『右端で折り返す』と、『書式設定の全般』に『指定の長さを超えたタグを折り返す』という設定があります



posted by lightbox at 2013-05-17 10:17 | VS(C#) | このブログの読者になる | 更新情報をチェックする

Windows Phone の MessageBox

Windows Phone API リファレンス

※ WindowsPhone では、MessageBoxButton 列挙体 は、OK と OKCancel しかありません

メッセージ ボックスはモーダルであるため、ユーザーはボタンをタップして、メッセージ ボックスを閉じる必要があります。

Microsoft ドキュメント

MessageBox.Show メソッド (String, String, MessageBoxButton) (System.Windows)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Diagnostics;
using Microsoft.Phone.Shell;

namespace BlankApp1
{
    public partial class MainPage : PhoneApplicationPage
    {
        // コンストラクター
        public MainPage()
        {
            InitializeComponent();
        }

        private void ApplicationBarIconButton_Click(object sender, EventArgs e)
        {
            var result = MessageBox.Show(
                (sender as ApplicationBarIconButton).Text,
                "タイトル",
                System.Windows.MessageBoxButton.OKCancel
                );

            if (result == MessageBoxResult.OK)
            {
                Debug.WriteLine("OK");
            }
            if (result == MessageBoxResult.Cancel)
            {
                Debug.WriteLine("Cancel");
            }
        }
    }
}

このサンプルではメッセージとして、呼び出し元の『ApplicationBarIconButton』のテキストを表示しています



タグ:Windows Phone
posted by lightbox at 2013-05-17 09:56 | Windows Phone | このブログの読者になる | 更新情報をチェックする

2013年05月10日


Win8 ストア : ファイルアクセス テンプレート

SkyDrive へ移動

ダウンロードしたテンプレートは、『C:\Users\ユーザー名\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#\Windows Store』に保存します。

Windows Store フォルダは最初は存在しないので作成します( 好きな名前のフォルダでも Visual Studio から利用できます )
ソースコード表示 Win8 ストア : ストアブランク テンプレートを元にファイルアクセス部分を実装しています 仕様 ❶ Page.Resources で XAML 内で利用する文字列を定義 ❷ テキストエリアを設置( ファイルの処理の為、Package.appxmanifest にファイル利用設定 ) ❸ AppBar を XAML で定義 (ボタンを左側3つ、右側2つ定義) ❹ それぞれのボタンにイベントを定義。但し、左側のファイル用ボタンは動的に作成 ❺ 保存ボタンのイベントで、MessageDialog の利用サンプルを実装 ❻ MessageDialog のイベントを別のソースコードに定義( partial ) ❼ TextResource.cs に、StaticResource 用のクラスを定義 ❽ MessageDialog 処理用の MsgBox クラス テキストエリア テキストエリアは、実際には TextBox で、AcceptsReturn="True" にする事によって複数行の入力が可能になります また、ファイルのアクセスを想定して、Package.appxmanifest に『機能』と『宣言』の設定をしています ( ページのロードでは、『text.txt』というファイルの存在チェックのみ行っています ) ファイル作成ボタンと保存ボタンの初期状態 一番最初の状態ではファイルは作成されていないので左側の3つ目のボタンは『ファイル作成』となっています。 また、右側の『保存』ボタンは、使用不可となっています。 ファイル作成とファイルの削除 bExist は、MainPage で定義した private 変数で、Page の Loaded イベントで設定しています。それによって、追加するボタンを差し換えて、それぞれの状態に対してイベントを定義していますが、この処理の切り替えは Page そのもののリロードによって行われます。
// ******************************************************
// ファイルが存在するので、削除ボタンを作成して処理を登録する
// ******************************************************
if (bExist)
{
	// インスタンス作成
	var btn = new Button();
	// スタイル
	btn.Style = (Style)App.Current.Resources["DeleteAppBarButtonStyle"];
	// テキスト表示
	AutomationProperties.SetName(btn, "削除");
	// 非同期ラムダ式
	btn.Click += async (_sender, _e) =>
	{
		MsgBox.ShowAsync(this, "OK", "ファイルを削除します");
		try
		{
			StorageFile strageFile = await storageFolder.GetFileAsync("text.txt");
			// ファイル削除
			await strageFile.DeleteAsync();
			// メニュー削除
			LeftBar.Children.RemoveAt(2);

		}
		catch (Exception ex)
		{
			Debug.WriteLine(ex.Message);
		}

		// Navigate の引数作成
		App.MyParam NavigateArgs = new App.MyParam() { title = "リロード", type = 1 };
		// ページを再表示
		(App.Current as App).rootFrame.Navigate(typeof(MainPage), NavigateArgs);

	};
	LeftBar.Children.Add(btn);

	SaveButton.IsEnabled = true;
}
// ******************************************************
// ファイルが存在しない。
// 1) 作成ボタンを作成して処理を登録する
// 2) 保存ボタンを選択できないようにする
// ******************************************************
else
{
	// インスタンス作成
	var btn = new Button();
	// スタイル
	btn.Style = (Style)App.Current.Resources["AddAppBarButtonStyle"];
	// テキスト表示
	AutomationProperties.SetName(btn, "ファイル作成");
	// 非同期ラムダ式
	btn.Click += async (_sender, _e) =>
	{
		MsgBox.ShowAsync(this, "OK", "ファイルを作成します");
		try
		{
			await storageFolder.CreateFileAsync("text.txt");
			// メニュー削除
			LeftBar.Children.RemoveAt(2);

		}
		catch (Exception ex)
		{
			Debug.WriteLine(ex.Message);
		}

		// Navigate の引数作成
		App.MyParam NavigateArgs = new App.MyParam() { title = "リロード", type = 2 };
		// ページを再表示
		(App.Current as App).rootFrame.Navigate(typeof(MainPage), NavigateArgs);

	};
	LeftBar.Children.Add(btn);

	SaveButton.IsEnabled = false;

}

ページのリロード

App.xaml.cs で、最初のページのロードが行われる際、以下のコードで表示する場所の骨格が作成されています。

public Frame rootFrame = Window.Current.Content as Frame;

rootFrame は、Window( 現在のアプリケーションウインドウ )Current(現在アクティブなウィンドウ)の UI である Content を Frame(フレーム)として取得しています。これは、仕様だと思われるので詳細な説明は Microsoft のドキュメントからは読み取りませんが、ブラウザと同様であると考えると良いと思います。

実際は、この rootFrame に、new Frame() でインスタンスを作成した上で利用されます。

つまり、アプリケーションの表示部分であるフレームに、実体であるページを XML ベースでロードするという手順になります。しかし、最初のロードで ページのインスタンスを作成する為に、Navigate メソッドが使用されています。

これは、この考え方でリロードすると、Navigate メソッドを実行する毎にページが新たに作成される事を意味します。

実際には、GoBack メソッドでも新たにインスタンスが作成されるようなので、画面の状態を保持して画面を切り替えるには、rootFrame.Content に保存しておいたページのインスタンスを戻すという処理が必要になります。( ここでは新しいインスタンスが都合が良いのでその方法は使っていません )

ファイルシステムへのアクセス

Windows の Shell のような感じで、フォルダオブジェクトを取得してそこからファイルオブジェクトを作成して、作成・削除・複製等の基本的な処理を行います。

ファイルの中身の更新は、FileIO という static なクラスの static なメソッドを使って、その引数としてファイルオブジェクトを使用します。

await FileIO.WriteTextAsync(strageFile, this.TextData.Text);

テキスト用のメソッドは、UTF-8N 前提の処理です。他のキャラクタセットとしてアクセスするには、バイナリデータとしてアクセスする必要があります。

Microsoft のサンプル

関連する情報

XAML コードを横に長く表示させずに、属性毎に縦に表示させる設定



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

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

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

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

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


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

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

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

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

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


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり