Welcome to the Question2Answer Q&A. There's also a demo if you just want to try it out.

Show question content on the main page

+1 vote
3,614 views
asked Feb 22, 2016 in Themes by ajayver

Hello,

Several years ago I have created a theme and overwrote the q_item_main function from my theme's qa-theme.php file:

function q_item_main($q_item)
        {
            $this->output('<DIV CLASS="qa-q-item-main">');
            $this->post_avatar($q_item, 'qa-q-item');
            $this->q_item_title($q_item);
            $this->post_meta($q_item, 'qa-q-item');
            $this->q_item_content($q_item);
            
            $this->output('<!--');
            print_r($q_item);
            $this->output('-->');
            $this->output('</DIV>');
            
        }

Today I have updated Q2A to the latest version and the content disappeared. The $q_item array doesn't have content anymore.

I tried to locate a function or file that populates this array, but with no luck...

How can I add content on the main page considering that I can do some php coding?

Thank you!

Q2A version: latest

1 Answer

+2 votes
answered Feb 23, 2016 by q2apro

As far as I can see, the qa-theme-base.php still holds the function. By default it is:

    public function q_item_main($q_item)
    {
        $this->output('<div class="qa-q-item-main">');

        $this->view_count($q_item);
        $this->q_item_title($q_item);
        $this->q_item_content($q_item);

        $this->post_avatar_meta($q_item, 'qa-q-item');
        $this->post_tags($q_item, 'qa-q-item');
        $this->q_item_buttons($q_item);

        $this->output('</div>');
    }


So you open the qa-theme.php and insert the code you need, for example: 

    public function q_item_main($q_item)
    {
        $this->output('<div class="qa-q-item-main">');

        $this->view_count($q_item);
        $this->q_item_title($q_item);
        $this->output("<p>Some Text</p>");
        $this->q_item_content($q_item);

        $this->post_avatar_meta($q_item, 'qa-q-item');
        $this->post_tags($q_item, 'qa-q-item');
        $this->q_item_buttons($q_item);

        $this->output('</div>');
    }

qa-theme-base.php holds all the functions you can override via qa-theme.php

 

> How can I add content on the main page considering that I can do some php coding?

Also use the qa-theme.php and override for example:

        // override main to output own html elements and more
        function main() {
            // teaser to ask
            if(!qa_is_logged_in() && ($this->template=='qa' || $this->template=='questions')) {
               $this->output('<p>Ask here...</p>');
            }
            // default call of the original function
            qa_html_theme_base::main();
        }

Hope that helps.

commented Feb 23, 2016 by ajayver
Thank you for your response!

This worked in previous versions of Q2A, but not in the latest version for some reason. The $this->q_item_content($q_item); function doesn't return anything because the $q_item array doesn't have content in it.

You can check the source code of this page http://golovoladki.ru - I print out the $q_item for each question and none of them have [content] in it:

Array
(
    [raw] => Array
        (
            [postid] => 2089
            [categoryid] =>
            [type] => Q
            [basetype] => Q
            [hidden] => 0
            [acount] => 1
            [selchildid] =>
            [closedbyid] =>
            [upvotes] => 1
            [downvotes] => 0
            [netvotes] => 1
            [views] => 586
            [hotness] => 37948200000
            [flagcount] => 0
            [title] => Для чего нужен этот предмет из металла
            [tags] =>
            [created] => 1447142085
            [name] =>
            [categoryname] =>
            [categorybackpath] =>
            [categoryids] =>
            [uservote] => 1
            [userflag] => 0
            [userfavoriteq] => 0
            [userid] => 5141
            [cookieid] =>
            [createip] => 171.25.188.179
            [points] => 35
            [flags] => 1
            [level] => 0
            [email] => trebnev@yandex.ru
            [handle] => виктор
            [avatarblobid] =>
            [avatarwidth] =>
            [avatarheight] =>
            [_order_] => 20
        )

    [hidden] => 0
    [tags] => id="q2089"
    [classes] =>
    [url] => ./2089/%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82-%D0%BC%D0%B5%D1%82%D0%B0%D0%BB%D0%BB%D0%B0
    [title] => <span title="">Для чего нужен этот предмет из металла</span>
    [q_tags] => Array
        (
        )

    [answers_raw] => 1
    [answers] => Array
        (
            [prefix] =>
            [data] => 1
            [suffix] =>  ответ
        )

    [answer_selected] =>
    [views_raw] => 586
    [views] => Array
        (
            [prefix] =>
            [data] => 586
            [suffix] =>  просмотров
        )

    [upvotes_raw] => 1
    [downvotes_raw] => 0
    [netvotes_raw] => 1
    [vote_view] => net
    [vote_on_page] => enabled
    [upvotes_view] => Array
        (
            [prefix] =>
            [data] => 1
            [suffix] =>  ЗА
        )

    [downvotes_view] => Array
        (
            [prefix] =>
            [data] => 0
            [suffix] =>  не интерисует
        )

    [netvotes_view] => Array
        (
            [prefix] =>
            [data] => +1
            [suffix] =>  голос
        )

    [vote_tags] => id="voting_2089"
    [vote_state] => voted_up
    [vote_up_tags] => title="Вы голосовали ЗА - нажмите, чтобы отменить голос" name="vote_2089_0_q2089" onclick="return qa_vote_click(this);"
    [vote_down_tags] =>  
    [meta_order] => ^what^who^where^when
    [what] => загадка
    [when] => Array
        (
            [data] => 10 Ноя, 15
        )

    [who] => Array
        (
            [prefix] => от
            [data] => <a href="./user/%D0%B2%D0%B8%D0%BA%D1%82%D0%BE%D1%80" class="qa-user-link">виктор</a>
            [suffix] =>
            [points] => Array
                (
                    [prefix] =>
                    [data] => 35
                    [suffix] =>  баллов
                )

            [title] =>
            [level] => Зарегистрированный пользователь
        )

    [avatar] =>
)

Thanks again for your help!
commented Feb 23, 2016 by q2apro
Well, there is no question content in the question list items. Tip: You can use the plugin mouseover-layer and modify it so that it outputs the content not in the "title" property but below the question. See https://github.com/q2a/question2answer/tree/dev/qa-plugin/mouseover-layer

$q_list['qs'][$index]['title']='<span title="'.qa_html($text).'">'.@$question['title'].'</span>';

becomes

$q_list['qs'][$index]['title'] = @$question['title'].'<br /><span class="yourcssformat">'.qa_html($text).'</span>';

(not tested)
commented Feb 24, 2016 by ajayver
Thank you for this tip!
Now I remember that I was tweaking this plugin.

This was the modified code for old Q2A that populates the [content] element: http://pastebin.com/Qf0KKciH

I didn't realize that updating Q2A also updates the plugins, so didn't research the new plugin's code.
So this is the edited latest mouseover plugin's code that populates the content element in $q_list array: http://pastebin.com/CPPMhruN - it works perfectly!

Thanks everyone for the help!
...