1

見てみましょう...ここからどこから始めますか?はい、私はJoomlaで作業しており、JomSocialと呼ばれるJoomlaコンポーネント内のコードを変更しようとしています。これを実行できなかったのは、コンポーネントまたはJoomlaシステムで何が起こっているのかを理解していないことに基づいています。ただ、PHPコードを十分に読み取れず、何が起こっているのかを変更できません。

基本的に、このスクリプトは、選択したユーザーからのプロファイル情報のすべてのビットの定義リストを出力します。これは素晴らしいことですが、ユーザープロファイルフィールドの配列全体ではなく、1つまたは2つのフィールドのみを使用したいサイトの別のセクションでこのコードを再利用する必要があります。

ここにスクリプトのコードのほとんどを含めていますが、私が求める答えははるかに単純であり、PHPの一般的な知識にすぎないと本当に感じています。具体的には、foreachステートメントが明示しているフィールドの配列をエコーするために何をしますか。

これがあなたの誰かが助けたいと思う何かなら、素晴らしい。これが一般的なPHPの質問セクションで解決されている場合は、リンクもすばらしいでしょう。PHPの回答でこのようなものを検索しようとしましたが、ここで求めていることを実行しているものはないようです。

繰り返しますが、私が本当に必要としているのは、すべてのフィールドをダンプするのではなく、個々のフィールドを繰り返すことによって、このコードが実行していることを実行できるようにすることです。

どうもありがとう、トーマス・ハリソン 私は畏敬の念を持ってあなたを見つめます。

<?php foreach( $profile['fields'] as $groupName => $items ): 

        // Gather display data for the group. If there is no data, we can 
        // later completely hide the whole segment
        $hasData = false;
        ob_start();

        ?>
        <div class="cProfile-About">
        <?php if( $groupName != 'ungrouped' ): ?>
        <h4><?php echo JText::_( $groupName ); ?></h4>
        <?php endif; ?>

        <dl class="profile-right-info">
            <?php foreach( $items as $item ): ?>
                <?php
                if( CPrivacy::isAccessAllowed( $my->id , $profile['id'] , 'custom' , $item['access'] ) )
                {
                    // There is some displayable data here
                    $hasData = true;
                ?>
                    <dt><?php echo JText::_( $item['name'] ); ?></dt>
                    <?php if( !empty($item['searchLink']) && is_array($item['searchLink']) ): ?>
                        <dd>
                            <?php foreach($item['searchLink'] as $linkKey=>$linkValue): ?>
                            <?php $item['value'] = $linkKey; ?>
                                <a href="<?php echo $linkValue; ?>"><?php echo CProfileLibrary::getFieldData( $item ) ?></a><br />
                            <?php endforeach; ?>

                        </dd>
                    <?php else: ?>
                        <dd>
                            <?php if(!empty($item['searchLink'])) :?>
                                <a href="<?php echo $item['searchLink']; ?>"> 
                            <?php endif; ?>

                            <?php echo CProfileLibrary::getFieldData( $item ); ?>

                            <?php if(!empty($item['searchLink'])) :?>
                                </a> 
                            <?php endif; ?>
                        </dd>
                    <?php endif; ?>
                <?php
                }
                ?>
            <?php endforeach; ?>
        </dl>
    </div>
    <?php 
    $html = ob_get_contents();
    ob_end_clean();

    // We would only display the profile data in the group if there is actually some
    // data to be displayed
    if( $hasData ):
        echo $html;
        $noData = false;
    endif;
    endforeach; 



if ($noData)
    echo ($isMine) ? JText::_('COM_COMMUNITY_PROFILES_SHARE_ABOUT_YOURSELF') : JText::_('COM_COMMUNITY_PROFILES_NO_INFORMATION_SHARE');

?>

4

1 に答える 1

0

私は(私が正しく理解していれば)あなたはただ次のようなことをする必要があると思います:

$profile['fields']['name'] //Replace 'name' with whatever field name you are after

echo必要に応じて、これを実行するか、後で使用するために別の変数に格納することができます。

'name'フィールド名がわかっている限り、コードの一部を変更するだけで、他のフィールドにもアクセスできます。

に保存されているすべてのデータを見つけるには$profile['fields']print_r($profile['fields']);次の形式ですべてのフィールドを出力します。

Array
(
    [name] => Fred Bloggs
    [Age] => 23
)

次に、の代わりに角かっこ内の任意のものを使用して、'name'そのフィールドの値を取得できます。

編集

あなたのペーストビンの例(http://pastebin.com/UbiHbDsL)で、21行目の値にアクセスしたいと言います。

[0] => Male

これを使用します:

$profile['fields']['Basic Information'][0]['options'][0]

これは基本的に、各角括弧セットの配列構造に深く入り込んでいます。Echo上記を実行すると、次のように出力されます。

于 2012-05-22T17:31:12.083 に答える