サポート » 使い方全般 » 商品を横に並べたい

  • 解決済 mugifumi

    (@mugifumi)


    お世話になります。
    数日前に商品を横に並べたいの質問では大変お世話になりました。
    おかげさまでテーブルを使っての方法で解決しましたので運用しております。
    並行してCSSを勉強したので応用してみましたがやはり未熟なので思い通り動きません。
    次のようにやりましたが何か根本的に間違っているのでしょうか。
    何卒、お助けください。

    PHPファイルです
    `<div class=”yoko5″>
    <?php the_content(); ?>
    </div>`
    ページにHTMLコードで投稿します。それが<?php the_content(); ?>で表示されますが現在は縦に並んで生きます。

    CSSファイルです

    .yoko5{
    width:145px;
    margin:0 20px 20px 0;
    padding:0px;
    float:left;
    }

    画像の大きさは125px×125pxです。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • ページにHTMLコードで投稿します。それが<?php the_content(); ?>で表示されますが現在は縦に並んで生きます。

    これがなんだか間違いの元のような気がします・・・
    現在のコード(縦に並んでいるもの)をブラウザで表示させて以下のようになっていますか?

    <div class="yoko5">
    投稿したコード
    </div>
    <div class="yoko5">
    投稿したコード
    </div>
    <div class="yoko5">
    投稿したコード
    </div>
    <div class="yoko5">
    投稿したコード
    </div>
    <div class="yoko5">
    投稿したコード
    </div>

    これが以下のようになっていると提示のcssではうまくいきません。

    <div class="yoko5">
    投稿したコード
    投稿したコード
    投稿したコード
    投稿したコード
    投稿したコード
    </div>

    確認してみてください。

    トピック投稿者 mugifumi

    (@mugifumi)

    shokun0803さん
    たびたびお世話になります。

    ご指摘のとおり以下のようになっていました。

    <div class="yoko5">
    投稿したコード
    投稿したコード
    投稿したコード
    投稿したコード
    投稿したコード
    </div>

    うーーん、困りました。

    the_content()は1つのエントリの中身を全部書き出してしまうので、

    `<div class=”yoko5″>
    <?php the_content(); ?>
    </div>`

    という書き方をすると全部ひっくるめて…になります。商品毎にくくらなければなりません。もし、1つのエントリ内に複数の商品があって、それを横に並べたいのであれば、エントリの編集画面(ビジュアルエディタはだめだったと思います)で、

    `<div class=”yoko5″>
    投稿したコード
    </div>
    <div class=”yoko5″>
    投稿したコード
    </div>
    <div class=”yoko5″>
    投稿したコード
    </div>
    <div class=”yoko5″>
    投稿したコード
    </div>
    <div class=”yoko5″>
    投稿したコード
    </div>`

    と書かないとならない、ということになります。もし、1エントリ内に複数のアイテムがあり、かつ、DIVタグを手打ちしたくないのであれば、the_content()だけをくくってもダメで、個別にその部分を解析するPHPコードを差し込む必要があると思います。

    もしくは、商品毎に1エントリにする…という方法なら先のthe_content()をくくる方法で並ぶはずです。

    トピック投稿者 mugifumi

    (@mugifumi)

    V.J.Catkickさん
    こんにちは。

    アドバイスありがとうございます。

     もしくは、商品毎に1エントリにする…という方法なら先のthe_content()をくくる方法で並ぶはずです。

    これは、具体的にどうすればよいのでしょうか?

    貼り付ける商品のHTMLをじっくり眺めてみました。1商品あたりのコードが長いので省略しますが概略分かったことを参考までに記述します。

    <table cellpadding="0" cellspacing="0" border="0" style="width:125px;height:200px;font-family:~~~
              ・
              ・
              ・
    ~~~tyle="margin: 0; border: 0;" /></td></tr></table>

    概ね一行132バイトが13行のHTMLです。

    この中に1商品のみの画像、説明文、詳細へのリンクやカートへのリンク等のコードが記述してあります。
    これをページ画面のHTMLで一個ずつ投稿しています。
    何卒、よろしくお願いいたします。

    1エントリに付き1つの商品にする方法ならば、単に.post等に対してCSSでfloat属性をつけてやり幅を指定すれば出来ます(横にいくつまで並べるのかは、包括しているボックスの幅で決まります)。

    エントリ(つまり投稿時)に気にしたくないのであれば、テーマファイルの方で先に書いたように、the_content()を含む行をDIVで囲み、CSSでfloat:left;と幅指定をします。

    つまり、本来なら(ブログ形式なら)、毎回のエントリが縦に並ぶのを、横につめて並べる…ということになります。

    手前味噌で恐縮ですが、1エントリを横に4つ並べた場合はこんな感じ:
    http://nekos.kyoeitech.com/?all_images=1
    2つ並べた場合はこんな感じ:
    http://www.vjcatkick.com/
    どちらも表示するためにあれこれコードを差し込んでいますが、基本は変わりません。CSSのリファレンス系サイトで、float属性のところを勉強すると理解が早いと思います。

    トピック投稿者 mugifumi

    (@mugifumi)

    V.J.Catkick さん
    こんにちは。
    ブログ拝見させていただきました。すばらしいです。これこそやりたいことです。

    >float属性のところを勉強すると理解が早いと思います。

    これについては大分理解できました。別にホームページを作成して試したりしましたが
    画像を横に並べることは自由自在に出来るようになりました。

    しかし、WordPressでとなると依然として縦並びです。

    <div class="yoko5">
    <?php the_content(); ?>
    </div>

    これだとすべての情報を読み込んでくるのでだめだとは分かるのですがこれ以上はどうすることも出来ません。一つのページに次々とHTMLを貼り付けるのでこれらを別々のエントリにするという方法も分かりません。
    よろしければ、再度ご教示くださいませんか。

    もう少し具体的に書いてみます。

    全て商品A,B,Cがあるとして、エントリ今日、昨日、一昨日があるとします。

    1エントリに複数の商品(HTML)を貼る場合:
    今日のエントリに商品A,B,Cと並べて貼る
    同様に昨日、一昨日も貼る

    1エントリ1商品(HTML)にする場合:
    今日のエントリ1に商品Aを
    今日のエントリ2に商品Bを…いか繰り返し

    ※先の例で挙げたサイトは1エントリ1商品のタイプになります。

    最初の例の方が商品を並べるという意味では楽になると思います。面倒なのはテーマ自体にPHPコードなりでなんらかの手を入れなければならないということでしょうか。もしそれをしないのであれば、コピペするHTMLそのものをDIVタグで囲み、そのDIVタグにfloatを付けてやれば、面倒ですがなんとかなります。つまり:

    <div style=”float: left; width: 100px;” >
    <!– 商品AのHTMLコード –>
    </div>

    <div style=”float: left; width: 100px;” >
    <!– 商品BのHTMLコード –>
    </div>

    とこんな感じになります。DIVタグに付けるスタイルはCSSに書き出しておくと繰り返し書かなくて済みます。

    2番目の例の方を考えると、.postなどに対してfloat属性を付ければ、およそどんな感じになるのかがわかります。例えばWordPressのdefaultテーマを例にとると、CSS(style.css)の最下行に次のCSSを追加してみて下さい。

    .post {
    width: 30%;
    float: left;
    }

    最低限のことしかしていないので見栄えは悪いですが、3つのエントリが横に並ぶはずです。

    1エントリに1商品にするか、1エントリ内部で並べるかによってやり方が違ってくるのと、やり方によってHTMLやCSS、それにPHPの知識の必要度合いが違うということになります。試してみて下さい。

    トピック投稿者 mugifumi

    (@mugifumi)

    ありがとうございます。

    ひとつ確認させてください。
    商品を貼り付けているページですがこれは時系列に依存しないPAGEを新規に作成したものを使っているので
    >全て商品A,B,Cがあるとして、エントリ今日、昨日、一昨日があるとします

    日付が絡んだ実験は出来ないような気がしています。

    ポイントがずれていたらご容赦ください。
    よろしくお願いいたします。

    日付はあくまで並んでいる順番…ということになりますので、Pageのように入れ替えても結果は同じ(並び順が変わるだけ)になります。単に例なので、その辺は広義に捉えていただければと思います。

    トピック投稿者 mugifumi

    (@mugifumi)

    V.J.Catkickさん
    迅速な返信ありがとうございます。

    <div style="float: left; width: 100px;" >
    <!-- 商品AのHTMLコード -->
    </div>
    
    <div style="float: left; width: 100px;" >
    <!-- 商品BのHTMLコード -->
    </div>

    おかげさまで少し分かりかけてきました。要するに何らかの方法でこの形を作らなければならないということですね。その鍵を握るのがPHPの習得ということでしょうか。
    自信がないですが勉強してみます。
    どうもありがとうございました。

    最初から記述しているテーブル

    <table cellpadding="0" cellspacing="0" border="0" style="width:125px;height:200px;font-family:~~~
              ・
              ・
              ・
    ~~~tyle="margin: 0; border: 0;" /></td></tr></table>

    のstyleにfloatを入れてしまうと言うのはどうでしょう?

    トピック投稿者 mugifumi

    (@mugifumi)

    shokun0803さんこんにちは。

    ご教示のことを試しましたらうまくいきました。
    ありがとうございました。

    現時点ではV.J.Catkickに教わった方法で以下のコードを沢山(何十行でも)書いておき単純にひたすら機械的に貼り付けるという作業をしています。
    我ながら非効率的なことをしているなと分かってはいるのですが今のスキルではどうすることも出来ず商売商売と自分に言い聞かせてやっています。

    <div style="float: left; width: 140px;" >
      ここにHTMLを貼り付け
    </div>
12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「商品を横に並べたい」には新たに返信することはできません。