XPressME Integration Kit

フォーラム

single.phpにいいねモジュールを組み込む

永らくありがとうございました フォーラム 使い方全般 single.phpにいいねモジュールを組み込む

このトピックには8件の返信が含まれ、2人の参加者がいます。8 年、 8 ヶ月前 匿名 さんが最後の更新を行いました。

9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • 投稿者
    投稿
  • #2674

    匿名

    toemon 様

    いつもお世話になります。

    株式会社RYUSさんで提供しているiineモジュールを、

    xpressme(wp)の個別ページ(single.php)に組み込むことは

    可能でしょうか。

    iineモジュールに同梱されている資料と下記のページを参考に

    single.phpに入れてみましたが(絶対に無理だと思いましたが…)、

    案の定、ダメでした…orz

    wpの記事単体でiine評価ができたらいいなと思いまして。

    何か解決策はありそうでしょうか。

    たびたび恐れ入りますが、

    アドバイスいただければ幸いです。

    よろしくお願いいたします。

    #3263

    toemon
    キーマスター

    XPressMEのコンテンツは各種WPプラグインの利用を可能にする目的で、Smartyテンプレートを利用しないレンダリングになっています。従って、iineモジュールのテンプレート変数を埋め込むことはできません。

    それらしいWPプラグインとしては

    Thank You Counter Buttonプラグインとかがあります。

    あとはfacebook like プラグインが多いですね。

    WPでsmartyを利用するプラグインで、Smarty for WordPressプラグインとかいうのがありますが、これを使ってXOOPS側のテンプレート変数を組み込めるかは不明です。

    #3264

    toemon
    キーマスター

    iineモジュールのコードをざっくりとみさせていただきました。使ったことがないので、詳細な検証は行っていませんが、

    single.phpの表示させたい位置でsmartyプラグインが呼んでいる、iineモジュール内部関数をコールすれば、それなりに表示してるみたいです。(下記参照)

    <code><?php<br />
    global $xoopsModule;<br />
    require_once XOOPS_MODULE_PATH."/iine/include/function.php";<br />
    $params['dirname']=$xoopsModule->dirname();<br />
    $params['id'] = $post->ID;<br />
    iine_print_button($params);<br />
    iine_print_users($params);<br />
    ?></code>

    #3265

    匿名

    toemon様

    ありがとうございます。

    <code><?php<br />
    global $xoopsModule;<br />
    require_once XOOPS_MODULE_PATH."/iine/include/function.php";<br />
    $params['dirname']=$xoopsModule->dirname();<br />
    $params['id'] = $post->ID;<br />
    iine_print_button($params);<br />
    iine_print_users($params);<br />
    ?></code>

    上記コードをsingle.phpに入れてみたところ、

    問題なく機能しているようでした。

    が…、ログアウト状態でもキャッシュが残るのか、

    「いいね!取消」ボタンが表示されてしまいまして、

    ボタンを押すと、以下のようなhtmlコードが

    吐き出されてしまいました。

    <code><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Refresh" content="1; url=http://example.com/user.php?xoops_redirect=%2Ftokku%2Fmodules%2Fiine%2Findex.php%3Faction%3DvoteByAjax" /> <title>XOOPS Cube Site</title> <link rel="alternate" media="handheld" type="text/html" href="http://example.com/modules/iine/index.php?action=voteByAjax" /></head> <body> <div style="text-align:center; background-color: #EBEBEB; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-right: 1px solid #AAAAAA; border-bottom: 1px solid #AAAAAA; font-weight : bold;"> <h4>このエリアへのアクセスは許可されていません。</h4> <p>ページが自動的に更新されない場合は<a href="http://example.com /user.php?xoops_redirect=%2Ftokku%2Fmodules%2Fiine%2Findex.php%3Faction%3DvoteByAjax"& gt;ここ</a>をクリックしてください</p> </div> </body> </html></code>

    XPressMEのコンテンツは各種WPプラグインの利用を可能にする目的で、Smartyテンプレートを利用しないレンダリングになっています。

    ということからも、xpressmeに埋め込むのは難しいということは、

    素人ながら想像できます。

    それらしいWPプラグインとしては

    Thank You Counter Buttonプラグインとかがあります。

    これは似たようなプラグインですね。

    ちょっと試してみたいと思います。

    #3266

    匿名

    たびたび失礼いたします。

    先ほどの、ゲストでsingle.phpを表示して

    「いいね!取消」を押すと下記のコードが表示されてしまう現象・・・

    <code><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Refresh" content="1; url=http://example.com/user.php?xoops_redirect=%2Ftokku%2Fmodules%2Fiine%2Findex.php%3Faction%3DvoteByAjax" /> <title>XOOPS Cube Site</title> <link rel="alternate" media="handheld" type="text/html" href="http://example.com/modules/iine/index.php?action=voteByAjax" /></head> <body> <div style="text-align:center; background-color: #EBEBEB; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-right: 1px solid #AAAAAA; border-bottom: 1px solid #AAAAAA; font-weight : bold;"> <h4>このエリアへのアクセスは許可されていません。</h4> <p>ページが自動的に更新されない場合は<a href="http://example.com /user.php?xoops_redirect=%2Ftokku%2Fmodules%2Fiine%2Findex.php%3Faction%3DvoteByAjax"& gt;ここ</a>をクリックしてください</p> </div> </body> </html></code>

    ゲストにiineモジュールへのアクセス権を与えたところ、

    表示されなくなりました。

    ただ、ゲストで投票していないにもかかわらず、

    「いいね!取消」ボタンが表示されてしまいました。

    押しても何も起こりません。

    他のモジュールの場合、ゲストでアクセスすると、

    「いいね!」ボタンが表示され、押すと、

    「登録ユーザからの投票はまだありません。 」(←無い場合)

    「*他、1名のゲストユーザより投票されています。 」

    となり、「いいね!取消」ボタンが表示されます。

    実際に取消ボタンも機能していて、

    投票を取り消すことができます。

    xpressmeの場合、ゲストの認識が難しいのであれば、

    ゲストにはボタンを表示しないなどできるといいのですが。

    #3267

    toemon
    キーマスター

    ただ、ゲストで投票していないにもかかわらず、

    「いいね!取消」ボタンが表示されてしまいました。

    押しても何も起こりません。

    他のモジュールの場合、ゲストでアクセスすると、

    「いいね!」ボタンが表示され、押すと、

    「登録ユーザからの投票はまだありません。 」(←無い場合)

    「*他、1名のゲストユーザより投票されています。 」

    となり、「いいね!取消」ボタンが表示されます。

    iineモジュールの仕様はよくわかりませんが、当方の環境で

    picoのテンプレート(**_viewcontent.html)に

    <code><{iine_button dirname=$mydirname id=$smarty.get.content_id}><br />
    <{iine_users dirname=$mydirname id=$smarty.get.content_id}></code>

    を追記してテストした限り、同様の問題が発生します。

    再現方法

    ユーザーログインした状態で「いいね!」投票が行われていないコンテンツ上で「いいね!」ボタンをクリックする。

    次にログアウトし、同様のコンテンツを開く

    この状態だと、指摘されている状態になります。

    逆に、先にゲストで「いいね!」投票して、後でログインユーザでの「いいね!」投票を行った場合、一見正常に動作しているように見えます。

    推測ですが、iineモジュールは、データベース上にアクセスIPとユーザIDを記録しており、

    投票有無の判断を行う部分でゲストでのアクセスの場合、アクセスIPだけをみているようです。

    同じマシンでテストを行った場合、ゲストもログインユーザもIPアドレスは同じになってしまうため、先にログインユーザで投稿したデータをIPだけで投票ありと判断し、「取り消し」ボタンの表示が行われてしまうのではないでしょうか?

    #3268

    toemon
    キーマスター
    #3269

    toemon
    キーマスター

    追加実験

    iine/function.phpの111行目

    <code>$sql = sprintf("SELECT COUNT(*) FROM %s WHERE content_id = '%u' AND dirname = '%s' AND ip = '%s'",</code>

    の部分(バッククオートがうまく表示できません)に AND uid = 0 を加えて

    <code>$sql = sprintf("SELECT COUNT(*) FROM %s WHERE content_id = '%u' AND dirname = '%s' AND ip = '%s' AND uid = 0",</code>

    のように修正し、ゲストアクセス時の投票有無判断から、ユーザIDのあるデータを除外することで、少なくとも、iineモジュールのゲストアクセス権限を有効にしてある状態での動作上の不具合は解消されるのではないでしょうか?

    アクセス権限の問題に関しては、よくわかりませんが、

    iineモジュールのアクセス権限に合わせるのであれば

    <code>global $module_handler,$xoopsUser;<br />
    <br />
    if (is_object($xoopsUser)) {<br />
    $user_groupe = $xoopsUser->getGroups();<br />
    } else {<br />
    $user_groupe = array(XOOPS_GROUP_ANONYMOUS);<br />
    }<br />
    $iine_module =& $module_handler->getByDirname( 'iine' ) ;<br />
    $iine_modid =  $iine_module->mid();<br />
    $sysperm_handler =& xoops_gethandler('groupperm');<br />
    if (!$sysperm_handler->checkRight('module_read', $iine_modid, $user_groupe)){<br />
    iineモジュールアクセス権限なし時の処理<br />
    } else {<br />
    iineモジュールアクセス権限あり時の処理<br />
    }</code>

    単にログインユーザとゲストの判断をしたいのであれば

    <code>global $xoopsUser;<br />
    <br />
    if (is_object($xoopsUser)) {<br />
    // ログインユーザ時の処理<br />
    } else {<br />
    // ゲスト時の処理<br />
    }</code>

    みたいな感じで分岐させれば良いのではないでしょうか?

    #3270

    匿名

    toemon 様

    レスが遅くなり申し訳ございませんでした。

    実は、別のモジュール(xootubeという映像モジュール)との

    iineモジュール共存を行ったところ、

    xpressmeで表示されなくなってしまい、いろいろ悩んでおりました。

    xootubeというモジュールではiineモジュールのカスタム版を用意しておりまして、

    オリジナルでないため、共存は難しいのかなとあきらめました。

    最初に教えていただきましたコード

    <code><?php<br />
    global $xoopsModule;<br />
    require_once XOOPS_MODULE_PATH."/iine/include/function.php";<br />
    $params['dirname']=$xoopsModule->dirname();<br />
    $params['id'] = $post->ID;<br />
    iine_print_button($params);<br />
    iine_print_users($params);<br />
    ?></code>

    こちらは問題なく表示ができました。

    次に、iineモジュールのアクセス権限に合わせるよりも、

    ログインユーザとゲストの判断が簡単でいいかなと思いまして、

    例えば、こんな感じでしょうか。

    <code><?php<br />
    global $xoopsUser;<br />
    <br />
    if (is_object($xoopsUser)) {<br />
    <br />
    global $xoopsModule;<br />
    require_once XOOPS_MODULE_PATH."/iine/include/function.php";<br />
    $params['dirname']=$xoopsModule->dirname();<br />
    $params['id'] = $post->ID;<br />
    iine_print_button($params);<br />
    iine_print_users($params);<br />
    <br />
    } else {<br />
    echo ' この記事を評価するにはログインしてください。 ';<br />
    }<br />
    ?></code>

    のようにしてみました。

    いったんこのような感じで使ってみたいと思います。

    誠にありがとうございました。

9件の投稿を表示中 - 1 - 9件目 (全9件中)

このトピックに返信するにはログインが必要です。