1

让我们看看......从哪里开始?好的,是的,我正在使用 Joomla 并尝试修改名为 JomSocial 的 Joomla 组件中的一些代码。我未能做到这一点并不是基于了解组件或 Joomla 系统中发生了什么,只是因为我无法很好地阅读 PHP 代码来修改正在发生的事情。

本质上,此脚本会输出来自选定用户的所有配置文件信息位的定义列表。这很好,但我需要在站点的不同部分重复使用此代码,我只想使用一个或两个字段,而不是整个用户配置文件字段数组。

我在这里包含了脚本中的大部分代码,但我真的觉得我寻求的答案要简单得多,而且只是一般的 PHP 知识。具体来说,我将如何回显 foreach 语句所显示的字段数组。

如果这是你们中的任何人都愿意提供帮助的事情,那太棒了。如果在一般 PHP 问题部分解决了这个问题,那么链接也很棒。我尝试在 PHP 答案中搜索类似的内容,但似乎没有人在做我在这里要求的事情。

同样,我真正需要的是能够完成这段代码正在做的事情,只需通过迭代单个字段来完成它,而不是通过转储每个字段。

非常感谢,Thomas Harrison, 我敬畏地看着你。

<?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'来获取该字段的值。

编辑

使用您的 pastebin 示例 (http://pastebin.com/UbiHbDsL) 说您想访问第 21 行的值:

[0] => Male

你会用这个:

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

这基本上是深入到每个方括号集的数组结构中。Echo上面会输出:

男性

于 2012-05-22T17:31:12.083 回答