Main Menu
collapse

Simple Portal Archived Forum

This is an Archive Forum.

The content in this forum may be out-of-date or have been superseded by newer information, and links in forum pages to other sites may not work.
This forum contains archives for future reference.

Visit our thread at Simple Machines Forum for current support.

SMF 2.1 users: EhPortal is a ported version of Simple Portal specifically designed for the SMF 2.1 branch.
Please visit web-develop.ca to download EhPortal and for its support.

User Info

Welcome Guest.
Please log in.

Who's Online

  • Dot Guests: 822
  • Dot Hidden: 0
  • Dot Users: 0

There aren't any users online.

Recent Posts

Adding Forums Button to Nav bar by jirapon
[August 01, 2019, 09:07:12 AM]


Re: Board Icons by ♦ Ninja ZX-10RR ♦
[July 30, 2019, 04:03:41 PM]


MOVED: Czech translation???? by ♦ Ninja ZX-10RR ♦
[July 30, 2019, 03:04:51 PM]


Board Icons by jirapon
[July 30, 2019, 07:28:44 AM]


Re: Thankyou Simpleportal, by ♦ Ninja ZX-10RR ♦
[July 29, 2019, 09:41:29 AM]


Welcome to SimplePortal.net! You can download SimplePortal from the Downloads Area!

hmm...about php block

Started by Eudemon, April 23, 2011, 11:24:27 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Eudemon

i wanna write a slide show block
i alrdy have the js and slide show codes set up

right now i need help getting the recent items from gallery aeva
i can easier get a item with this code
<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';preview" alt="" />
but how do i make loop recent 5 items
and how do i get the title, just use $item['title']?

also anyone know how to get for example
the image from [img] tag one from each thread for looping recent 5 threads?
i just need to get the img url, the thread url and thread title

thx

if u need to see my site it's on my signature

?also offer free SMF support and customization?

[SiNaN]

For AevaMedia:

global $sourcedir, $galurl;

require_once($sourcedir . '/Aeva-Subs.php');

$items = aeva_getMediaItems(0, 5, 'm.id_media DESC');

foreach ($items as $item)
echo $item['title'], '<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';thumb" alt="" /></a><br />';


You can use such a code to see what's available in $items array:

echo '<pre>';
print_r($items);
echo '</pre>';


For the extracting images from topics:

global $smcFunc;

$board_id = 1;

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board = {int:board}
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'board' => $board_id,
'limit' => 5,
)
);
$items = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
);
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<a href="', $item['href'], '">', $item['title'], '</a>:', (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />';


Change the $board_id as the id of the board you want to fetch images from.
And slowly, you come to realize... It's all as it should be...

Eudemon

#2
thank you SiNaN

if i want to get the items from specific album, where do i put the album id?

also for the topic tag
i wanna make it search [img] or <img> since i sometimes use html tag

also for the topic loop, here is my code
foreach ($items_t as $item_t){
echo '<a href="', $item_t['href'], '">' (!empty($item_t['image']) ? '<img src="' , $item_t['image'] , '" alt="" /><span>',$row['subject'],'</span>' : 'No Image') '</a>';
}

i added _t in the end because i placed media code in there too, since they both use $items, i also changed $item to $item_t when define array
anyways, the above code i'm getting unexpected '(', expecting ',' or ';'
can u see the error?

?also offer free SMF support and customization?

grafitus

In Sinan's code:
Code (Find) Select
$items = aeva_getMediaItems(0, 5, 'm.id_media DESC');
Code (Replace) Select
$items = aeva_getMediaItems(0, 5, 'm.id_media DESC', true, array(1, 5, 16));

1, 5 and 16 are album IDs.
my modsI don't reply support PMs. Please use support forums.

Eudemon

thx, that works, btw i edited my last post can you take a look?

?also offer free SMF support and customization?

grafitus

Use this:
foreach ($items_t as $item_t)
echo '<a href="', $item_t['href'], '">', (!empty($item_t['image']) ? '<img src="', $item_t['image'], '" alt="" /><span>', $row['subject'], '</span>' : 'No Image'), '</a>';
my modsI don't reply support PMs. Please use support forums.

Eudemon

still getting
syntax error, unexpected ','
and it's not missing tag from before, cuz if i comment out that part the whole thing works fine

again, when fetch topic from db
i wanna make it search for [img] or <img> and only match the 1st one
should be this code needs to change
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
unfortunately my coding is not good enough to tweak this one  ;P sorry

?also offer free SMF support and customization?

Chen Zhen

#7

foreach ($items_t as $item_t)
echo '<a href="', $item_t['href'], '">', !empty($item_t['image']) ? '<img src ="'.$item_t['image'].'" title="'.$row['subject'].'" alt="" /><span>'. $row['subject']. '</span>' : 'No Image' , '</a>';


no comma for logic only for echo

Eudemon

#8
thx, that did the trick, still looking for help when fetching topics, see my previous post

QuoteChange the $board_id as the id of the board you want to fetch images from.
what if i wanna fetch from multiple boards?

?also offer free SMF support and customization?

Chen Zhen

#9

global $smcFunc;
$limit = 100;

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN (1,2,3,4,5)
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'board' => $boards,
'limit' => $limit,
)
);
$items = array();
$count = 0;
while ($row = $smcFunc['db_fetch_assoc']($request))
{       
        $pattern = '/\[img]([^\[]+)?\[\/img\]?/i';
        preg_match ($pattern, $row['body'], $matches);
        $src = $matches[1];
        unset($matches);
        if (empty($src)) {continue;}
        if ($count > 4) {break;}
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' =>  $src,
);
        $count++;
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<div style="text-align:center;"><a href="', $item['href'], '">',  (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />', $item['title'], '</a><br /></div>';


I dunno - you can mess with that.. that should show the first 5 images incrementing from boards 1 - 5 assuming there are at least 5 images in the first 100 (limit) topics.

[SiNaN]

#10
Quote from: Eudemon on April 24, 2011, 03:53:37 PM
again, when fetch topic from db
i wanna make it search for [img] or <img> and only match the 1st one
should be this code needs to change
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
unfortunately my coding is not good enough to tweak this one  ;P sorry

The second code I gave would do exactly that. If you want multiple boards, use this:

global $smcFunc;

$boards = array(1, 2, 3);

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN ({array_int:boards})
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'boards' => $boards,
'limit' => 5,
)
);
$items = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
);
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<a href="', $item['href'], '">', $item['title'], '</a>:', (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />';


If not all the topics in those boards have images in their first posts and you need to make sure only topics with images are fetched, you can use this:

global $smcFunc;

$boards = array(1,2);

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN ({array_int:boards})
AND m.body LIKE {string:search}
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'boards' => $boards,
'search' => '%[/img]%',
'limit' => 5,
)
);
$items = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
);
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<a href="', $item['href'], '">', $item['title'], '</a>:', (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />';


This will be slower if you have a lot of posts in your forum though.
And slowly, you come to realize... It's all as it should be...

Eudemon

tested with the 1st one
i have a topic that writes img in html
[html]
<img src="http://www.kumakuni.com/img/logo/leaf-2-logo.png" />
[/html]

it's not getting that image

and it does work for regular bbc [img] tags
also the multiple board edit works also, thx

?also offer free SMF support and customization?

Chen Zhen

#12

global $smcFunc;
$limit = 100;
$boards = array(1,2,3,4,5);

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN ({array_int:boards})
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'boards' => $boards,
'limit' => $limit,
)
);
$items = array();
$count = 0;
while ($row = $smcFunc['db_fetch_assoc']($request))
{       
        $patterns = array('\[img]([^\[]+)?\[\/img\]?', '\<img([^\[]+)?\><\/img\>?', '\<img([^\[]+)?\/\>?');
        $remove = array('/ >', '<img>', '<img', '/>', '</img>', '[img]', '[/img]', 'src=', '"', '>');
        $pattern = '/(' .implode('|', $patterns) .')/i';
        preg_match ($pattern, $row['body'], $matches);
        $src = $matches[1];
        unset($matches);
        if (empty($src)) {continue;}
        if ($count > 4) {break;}
        $src = str_ireplace($remove, '', $src);
        if (substr($src,-1) == '/') {$src = substr($src,0,-1);}
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' =>  $src,
);
        $count++;
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
{
echo '<div style="text-align:center;"><a href="', $item['href'], '">',  (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" title="'.$item['title'].'" />' : 'No Image') . '<br />', $item['title'], '</a><br /></div>';
}


Try that out.

Eudemon

#13
QuoteTry that out.
tried, didn't work
it's doing weird thing like each topic slide showing the 5th image from media
some words in those post pop up and then disappear
also it get the newest 4 posts from board 1 in array and 1 from other board
but the other board posts are newer than those from board 1
thanks tho Underdog

anyways
the last one [SiNaN] gave me works
only it's not getting img from post using html tag like
[html]
<img src="http://www.kumakuni.com/img/logo/leaf-2-logo.png" />
[/html]


?also offer free SMF support and customization?

AngelinaBelle

Are you putting the "get slide show from AEVA" and "get images from topics" code into the same block?
Please to keep this website running, if you like SimplePortal, make a
one-time subscription. Thank you for your support.

Have you tried the SimplePortal documentation?

Eudemon

i use $item for get aeva and rename get topic to $item_t
so they won't collide each other, in fact it's actually working
i've tested and i'm getting 5 from aeva and 5 from topic
the only problem right now the get topic isn't getting the post image that uses <img src="~~~

?also offer free SMF support and customization?

AngelinaBelle

I don't know, offhand, where the thing is going wrong.
If I had written the code, the first thing I would do is double-check my own regexps, using one of the online regexp testers like http://www.spaweditor.com/scripts/regex/
To be sure what is going on, you can just get the block to echo something useful at each step, moving from $body to $matches to str_ireplace($remove, '', $src).
Please to keep this website running, if you like SimplePortal, make a
one-time subscription. Thank you for your support.

Have you tried the SimplePortal documentation?

Eudemon

what looks missing to me is this line
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
it seem to me that the image build/search is building [img] image from post
but is not building <img src="~~ image from post
my coding is not good enough to tweak this line tho

?also offer free SMF support and customization?

[SiNaN]

In the code I gave:

Code (Find) Select
'~\[img[^\]]*\](.+?)\[/img\]~'

Code (Replace) Select
'~(?:<|\[)img.*?(?:src="|\])(.+?)(?:".+?/>|\[/img])~'

It'll catch both BBC and HTML img tag.
And slowly, you come to realize... It's all as it should be...

Eudemon

#19
that works

and here is the code i wrote to *try* to combine the 5 items from media, and 5 items from post
and shuffle it, but it seems like the array is not storing the string, can u see why

$slide=array();
$num=-1;
foreach ($items as $item){
        $num=$num+1;
$slide= array( $num => '<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';preview" alt="" />
                <span>', $item['title'],'</span></a>' );
}

foreach ($items_t as $item_t){
        $num=$num+1;
        $slide = array ( $num => '<a href="', $item_t['href'], '">', !empty($item_t['image']) ? '<img src ="'.$item_t['image'].'" title="'.$row['subject'].'" alt="" /><span>'. $item_t['title']. '</span>' : 'No Image' , '</a>' );
}

shuffle($slide);

for($i=0;$i<$num;$i++)
    echo $slide[$i];


update: there was a missing $, and right now it's only loading 1 image OTL

?also offer free SMF support and customization?