Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 01.06.2010 23:53
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз
Контактная информация:

Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Vova_OB » 18.12.2013 1:30

ссылки на оффсайтах:
1.(скачать здесь): http://www.ivemfinity.com/foro/mods-php ... -t673.html

Модуль добавляет стену для комментариев в профили пользователей, работает хорошо.
Хочу сделать кнопку лайк (или +1) которая на против каждого сообщения на стене в профиле в профиле.
Но выдает ошибку

Код: Выделить всё

Fatal error: Call to undefined function insert_likes() in /home/vovaob/fireartforum.com/www/memberlist.php on line 1769
1. Cоздал таблицу LIKES_TABLE (id (автоинкремент),wall_id ,user_id)
при нажатии кнопки в єту таблицу добавляется ряд с номером записи на стене и номером пользователя который нажал кнопку на против записи стены.
2 в таблицу WALL_TABLE добавил поле wall_likes в котором суммируются лайки при нажатии кнопки относительно каждой записи на стене.

3. в файл мода wall.php добавил:

Код: Выделить всё

case 'likes':
global $db, $user, $phpbb_root_path, $phpEx,  $config, $auth;
insert_likes($wall_id , $user->data['user_id']);
		if (isset($_REQUEST['likes'])) 
{
function insert_likes($wall_id , $user->data['user_id'])
{
global $db, $user, $phpbb_root_path, $phpEx,  $config, $auth;
	$sql_array = array(
		'SELECT'	=> 'w.wall_id',
		'FROM'		=> array (WALL_TABLE => 'w'),
		'WHERE'		=> 'w.wall_id =' . (int) $wall_id );
	$sql = $db->sql_build_query('SELECT', $sql_array);
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
			$sql = 'INSERT INTO ' . WALL_TABLE . ' ' . $db->sql_build_array('INSERT', array(
				'user_id'	=> (int) $user_id,
				'wall_id'	=> $wall_id,
			));
			$db->sql_query($sql);
			return;
}
}

	break;
4. в memberlist.php в коде мода после строки:

Код: Выделить всё

$wall_empty = false;		
Добавил:

Код: Выделить всё

$wall_id = $row['wall_id'];
			
				if (isset($_REQUEST['likes'])) 
{
global $db, $user, $phpbb_root_path, $phpEx,  $config, $auth;
insert_likes($wall_id, $user->data['user_id']);
}
после:
'S_DELETED' => $row['wall_deleted'],
добавил:
'SHOW_LIKES'=> $row['wall_like'],//отображает количество лайков(єту функцию еще не сделал)
'LIKES_LINK' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $user_id . '&likes=' . $row['wall_id']) ,

5 в файл memberlist_view.html в коде мода рядом с кнопкой:
<a href="{wallrow.U_DELETE}">{DELETE_IMG}</a>
Разместил:
likes: {wallrow.SHOW_LIKES} //отображает количество, еще не брался за счетчик
id: {wallrow.WALL_ID} // вывод id для того чтобі смотреть что происходит в БД при нажатии кнопки +1
<a href="{wallrow.LIKES_LINK}" >+1</a> //кнопка при нажатии которой в таблицу 1 добавляется строка с wall_id и user_id(того кто кликнул)

В итоге при нажатии кнопки на экране ошибка

Код: Выделить всё

Fatal error: Call to undefined function insert_likes() in /home/vovaob/fireartforum.com/www/memberlist.php on line 1769
и в таблицу LIKES_TABLE (id (автоинкремент),wall_id ,user_id) не добавляется ничего.

В чем ошибка??

Добавлено спустя 19 минут 24 секунды:
русский перевод мода wall 0.0.1
wall.rar
(1.48 КБ) 184 скачивания
Последний раз редактировалось Vova_OB 18.12.2013 2:06, всего редактировалось 1 раз.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11484
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2576 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1

Сообщение Sheer » 18.12.2013 2:05

Vova_OB писал(а):В чем ошибка??
В том, что функция insert_likes() объявляется в файле wall.php, и поэтому недоступна из файла memberlist.php, откуда осуществляется ее вызов в строке 1769. Код функции следует вынести в отдельный файл и подключать (include) его там, где происходит ее вызов. Или перенести в ./includes/function.php, что будет проще - функции, объявленные там, доступны везде.

Добавлено спустя 8 минут 39 секунд:
Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?
Кстати, а кто надоумил объявлять функции под условием if ?
Кошшшмаррр...

Добавлено спустя 1 минуту 39 секунд:
Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?
И зачем
global $db, $user, $phpbb_root_path, $phpEx, $config, $auth; в membrtlist.php ?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 01.06.2010 23:53
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Vova_OB » 18.12.2013 2:17

Sheer писал(а):Кстати, а кто надоумил объявлять функции под условием if ?
Кошшшмаррр...
я только учусь

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11484
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2576 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Sheer » 18.12.2013 2:19

Vova_OB писал(а):я только учусь
Скачай книжицу каку-нибудь по php. И тренироваться лучше на кошках.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 01.06.2010 23:53
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Vova_OB » 18.12.2013 2:21

Нашел ошибку у себя в коде

Код: Выделить всё

function insert_likes($wall_id , $user->data['user_id'])
{
global $db, $user, $phpbb_root_path, $phpEx,  $config, $auth;
	$sql_array = array(
		'SELECT'	=> 'w.wall_id',
		'FROM'		=> array (WALL_TABLE => 'w'),
		'WHERE'		=> 'w.wall_id =' . (int) $wall_id );
	$sql = $db->sql_build_query('SELECT', $sql_array);
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
			$sql = 'INSERT INTO ' . WALL_TABLE . ' ' . $db->sql_build_array('INSERT', array(
				'user_id'	=> (int) $user_id,
				'wall_id'	=> $wall_id,
			));
			$db->sql_query($sql);
			return;
}
В строке WALL_TABLE Заменить на LIKES_TABLE

Код: Выделить всё

$sql = 'INSERT INTO ' . WALL_TABLE . ' ' . $db->sql_build_array('INSERT', array(
єта ошибка еще есть

Код: Выделить всё

Fatal error: Call to undefined function insert_likes() in /home/vovaob/fireartforum.com/www/memberlist.php on line 1769

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11484
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2576 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Sheer » 18.12.2013 2:23

Раскури код файла common.php и станет понятно, почему не нужно дополнительно объявлять$db, $user, $phpbb_root_path, $phpEx, $config, $auth там, где include($phpbb_root_path . 'common.' . $phpEx);
єта ошибка еще есть
Я ответил почему она есть.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 01.06.2010 23:53
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Vova_OB » 18.12.2013 15:09

Сделал, работает отлично
1. Только для зарегистрированных пользователей кто видит профиль
2. нажать можно кнопку +1 только один раз на против каждого комментария на стене профиля
3. Рядом с кнопкой +1 счетчик

4. в код модуля в файл memberlist.php:
после:

Код: Выделить всё

'S_DELETED'			=> $row['wall_deleted'],
добавить:

Код: Выделить всё

'SHOW_LIKES'=> ($row['wall_likes'] != 0) ? $row['wall_likes']: '',
	'LIKES_LINK' => append_sid("{$phpbb_root_path}wall.$phpEx", "mode=likes&u=".$user->data['user_id']."&w=".$row['wall_id']),
после
====
5. в файл wall.php
после

Код: Выделить всё

case 'delete':
...
break;
добавить:

Код: Выделить всё

case 'likes':
	//get wall id
	$sql_array = array(
		'SELECT'	=> 'w.wall_id',
		'FROM'		=> array (WALL_TABLE => 'w'),
		'WHERE'		=> 'w.wall_id =' . (int) $wall_id );
	$sql = $db->sql_build_query('SELECT', $sql_array);
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
	
	//////////////////////////////////////////
	//Likes permissons 1 like per wall comment
	if (get_like_exists($wall_id, $user_id) != true)
        {
			$sql = 'INSERT INTO ' . LIKES_TABLE . ' ' . $db->sql_build_array('INSERT', array(
				'user_id'	=> $user->data['user_id'] ,
				'wall_id'	=> $wall_id,
			));
			$db->sql_query($sql);
	
	//total likes before click +1
	$sql = 'SELECT wall_likes AS total_likes_before
			FROM ' . WALL_TABLE . '
			WHERE wall_id = ' .  $wall_id;
		$result = $db->sql_query($sql);
		$total_likes_before = (int) $db->sql_fetchfield('total_likes_before');
		$db->sql_freeresult($result);
	//add +1 in wall_likes when click +1 button
	$sql = 'UPDATE ' . WALL_TABLE . '
						SET ' . $db->sql_build_array('UPDATE', array(
							'wall_likes'				=>( $total_likes_before + 1 ),
				
							)) . '
						WHERE wall_id = ' .  $wall_id;
					$db->sql_query($sql);
	   }
	///////////////////////////////////
	//id for redirect 
	    $sql = 'SELECT wall_user_id AS wall_user_link
			FROM ' . WALL_TABLE . '
			WHERE wall_id = ' .  $wall_id;
		$result = $db->sql_query($sql);
		$wall_user_link = (int) $db->sql_fetchfield('wall_user_link');
		$db->sql_freeresult($result);
		
		//for redirect 
		$success = true;	
		
	
    break;
	
======
после:

Код: Выделить всё

if ($mode == 'delete')
	{
		$message = $user->lang['POST_DELETED'];
	}
добавить
//for redirect after +1 button click

Код: Выделить всё

elseif ($mode == 'likes')
	{
		$message = $user->lang['POST_LIKED'];
		redirect(meta_refresh(3, append_sid("{$phpbb_root_path}memberlist.$phpEx", "&mode=viewprofile&u=".$wall_user_link )));
	}
====
В файл языков wall.php соответственно добавить

Код: Выделить всё

'POST_LIKED' =>'Comment liked',
или
'POST_LIKED' =>'Вам понравилось сообщение' //чтот о в таком духе
====
после

Код: Выделить всё

'wall_text' 		=> $comment,
добавить
//when create new wall comment wall_likes = 0

Код: Выделить всё

'wall_likes' 		=> 0,
====
перед добавить
//for each user can click +1 button 1 time per wall comment

Код: Выделить всё

function get_like_exists($wall_id = 0, $user_id = 0)
    {
        global $db, $config;
        $return_value = false;
               
        $sql = 'SELECT COUNT(id) AS like_id_count FROM '.LIKES_TABLE.'
                WHERE wall_id = '.$wall_id.' AND user_id = '.$user_id;

        $result = $db->sql_query($sql);
        $like_count = (int) $db->sql_fetchfield('like_id_count', false, $result);

        if ($like_count > 0)
        {
            $return_value = true;
        }

        return $return_value; 
    }
====
6. в файл memberlist_view.html
перед

Код: Выделить всё

<!-- IF wallrow.U_DELETE --><a href="{wallrow.U_DELETE}"><span>{DELETE_IMG}</span></a><!-- ENDIF -->
добавить

Код: Выделить всё

<div style="border:1px solid #c5c5c5; border-radius:3px;height:22px;" ><a href="{wallrow.LIKES_LINK}"  ><img src="{T_IMAGESET_PATH}/thankposts.gif" align="absmiddle" /></a> {wallrow.SHOW_LIKES}</div>
// кнопка +1 и счетчик на против каждого сообщения на стенке
====
таблица LIKES_TABLE имеет такой вид в данном случае
likestable.jpg
в таблицу WALL_TABLE добавить поле wall_likes
walltablelikefield.jpg
===
в файл constants.php
в конце файла перед добавить

Код: Выделить всё

define('LIKES_TABLE',		$table_prefix . 'likes');
===

мод работает, этот скрипт можно применить к любому модулю форума в любом месте где есть контент пользователей который хотите чтобы пользователи оценивали.
также разработать страницу рейтинга по количеству лайков в данном модуле и в других модулях форума

Добавлено спустя 1 час 51 минуту 28 секунд:
===
в файл мода wall.php
после

Код: Выделить всё

confirm_box(false, $user->lang['DELETE_POST_CONFIRM'], $s_hidden_fields);
		}
добавить

Код: Выделить всё

$sql_array = array(
		'SELECT'	=> 'w.wall_id',
		'FROM'		=> array (WALL_TABLE => 'w'),
		'WHERE'		=> 'w.wall_id =' . (int) $wall_id );
	$sql = $db->sql_build_query('SELECT', $sql_array);
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
	
	 $sql = 'DELETE FROM ' . LIKES_TABLE  . ' 
		       WHERE wall_id =' .$wall_id;
       $db->sql_query($sql);
       $db->sql_freeresult($result);
Данный кусок кода удаляет лайки коментария который удаляется пользователем или админом
===

AntonioBD
phpBB 1.4.0
Сообщения: 34
Зарегистрирован: 12.01.2016 23:59
Благодарил (а): 5 раз

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение AntonioBD » 16.01.2016 3:55

Vova_OB
спасибо за инструкцию
но мне, как первую неделю изучающему phpbb форум, внести все изменеия во все файлы так, что бы ничего ненапутать, боюсь будет долго и сложно
нельзя ли просто заменить мои файлы с этими названиями, на Ваши, уже с правками, что бы появились возможности Лайков ?
Если Да, то можете выложить ссылку где их закачать и в какие директории залить по ftp ?
Извиняюсь, если глупый вопрос задал ;)
Antonio
начинающий модератор forumspain.ru

Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 01.06.2010 23:53
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Vova_OB » 18.01.2016 22:34

Прошу прощения, когда я писал этот модуль я изучал PHP + MySQL + API phpBB 3.0.6, в то время базовые знания языков и архитектуры форума помогли написать эти лайки и общую их статистику к любому модулю (стояло несколько десятков модулей). С учетом того что удалил все исходники форума ( по причине утраты интереса, ухода внимания в другие темы) и уже 3 года не видел код этого движка, а он наверняка за 3 года кардинально потолстел и изменился -то даже не знаю что вам сказать. Могу только сказать если вы начнете упорно на практике учить и применять PHP(OOP) + MySQL(PDO) + HTML5 + CSS3 +JS - вы сможете с любого движка любой сборки сделать "Канфетку" или свою с чистого листа написать ничем не уступающую.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11484
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2576 раз
Контактная информация:

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение Sheer » 18.01.2016 23:13

AntonioBD имеет форум на phpBB3.1 и желает внести изменения в ядро? Ну-ну...
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

AntonioBD
phpBB 1.4.0
Сообщения: 34
Зарегистрирован: 12.01.2016 23:59
Благодарил (а): 5 раз

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение AntonioBD » 19.01.2016 3:18

Sheer писал(а):AntonioBD имеет форум на phpBB3.1 и желает внести изменения в ядро? Ну-ну...
Я имел в виду, что просто хотел кнопки лаки поставить на своем форуме. И еще репосты в соцсети тоже кстати. Раз у других это есть, значит теоретичесски этоьвозможно понимаю. Вот и ищу способ это сделать наименьшими трудозатратами. Чем изучать все с нуля и писать самому код, думал может у когг то уже есть готовый и можно просто заменить определенные файлы у меня без кода на другие, уже с кодом...
Как то так я себе этоьпредставляю, как новичек ;)
Antonio
начинающий модератор forumspain.ru

AntonioBD
phpBB 1.4.0
Сообщения: 34
Зарегистрирован: 12.01.2016 23:59
Благодарил (а): 5 раз

Re: Кнопка like в модуле Wall 0.0.1, как исправить ошибку?

Сообщение AntonioBD » 21.01.2016 19:00

Господа !
Никто не поможет начинающему админу (не программисту, а пользователю) сделать на форуме forumspain.ru кнопки репостов в соцсети ?
Мне казалось что в 2016 году эта такая же элементарная функция, добавляющаяся почти автоматически, как и умение пользоваться мобильником в 2005 году ;)
Antonio
начинающий модератор forumspain.ru

Закрыто

Вернуться в «Запросы модов для phpBB 3.0.x»