Вот в последней строчке префикс должен быть разным для разных сайтов, чтобы не получилась «каша». Еще раз повторюсь, для 0.3.1 — не знаю, но возможно все то же.
<?php
class BlockMyBlock extends Block {
public function Exec() {
}
}
?>
Вообще создавать класс обработчика для блока не обязательно, тем более, если никаких вычислений не происходит. В этом случаи достаточно подключить блок указанием полного пути до него, например:
1. Еле методом тыка нашел 0.4.1 версию, запарился реально искать рабочий вариант, для тех кто как я, он тут idea2.ru/files/iface/0.4.1/iface.zip пс: автор упорядочите ссылки по версиям чтобы людей не путать и в модули на лс загрузите под 0.4.1
2. Чтобы работало с плагином рейтиг пользователей, нужно в плагине PluginUserhacks.class.php закомментировать
и в файл templates/skin/new/actions/ActionProfile/whois.tpl (уже скопированный в этот каталог из плагина круг друзей) перед строкой
{if $oUserProfile->getProfileSex()!='other'
добавить {hook run='userhacks_whois'}
3. если вы используете плагин компании, то нужно также убрать делегирование whois.tpl, в файле PluginCompany.class.php удалив строку
Проблема в не целостности базы, возможно она была MyISAM.
Конвертировать текущую 0.3.1 БД в нормальный целостный вид можно этим скриптом. Далее уже получившуюся БД конвертировать в 0.4.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
set_time_limit(0);
$conn1 = mysql_connect("localhost", "root", "");
$conn2 = mysql_connect("localhost", "root", "",true);
if (!$conn1) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}
if (!mysql_select_db("livestreet03",$conn1)) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}
if (!mysql_select_db("livestreet03new",$conn2)) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}
mysql_query("set character_set_client='utf8'",$conn1);
mysql_query("set character_set_results='utf8'",$conn1);
mysql_query("set collation_connection='utf8_bin'",$conn1);
mysql_query("set character_set_client='utf8'",$conn2);
mysql_query("set character_set_results='utf8'",$conn2);
mysql_query("set collation_connection='utf8_bin'",$conn2);
function buildInsertSql($sTable,$aRow) {
$sql='INSERT INTO '.$sTable.' SET ';
foreach ($aRow as $key => $value) {
if (!is_null($value)) {
$value="'".mysql_escape_string($value)."'";
} else {
$value='NULL';
}
$sql.=' '.$key."=".$value.",";
}
return trim($sql,',');
}
function exportTable($sTable) {
global $conn1;
global $conn2;
$iAll=0;
$iExp=0;
$res = mysql_query("SELECT * FROM {$sTable}",$conn1);
if ($res) {
while ($row = mysql_fetch_assoc($res)) {
if (@mysql_query(buildInsertSql($sTable,$row),$conn2)) {
$iExp++;
}
}
$iAll=mysql_num_rows($res);
mysql_free_result($res);
}
echo "Export {$sTable}: {$iExp} from {$iAll}\n";
}
//пользователи
exportTable('prefix_user');
exportTable('prefix_user_administrator');
exportTable('prefix_user_vote');
//блоги
exportTable('prefix_blog');
exportTable('prefix_blog_user');
exportTable('prefix_blog_vote');
//топики
exportTable('prefix_topic');
exportTable('prefix_topic_vote');
exportTable('prefix_topic_tag');
exportTable('prefix_topic_read');
exportTable('prefix_topic_question_vote');
exportTable('prefix_topic_content');
exportTable('prefix_topic_comment');
exportTable('prefix_topic_comment_vote');
exportTable('prefix_topic_comment_online');
//почта
exportTable('prefix_talk');
exportTable('prefix_talk_comment');
exportTable('prefix_talk_user');
//география
exportTable('prefix_city');
exportTable('prefix_city_user');
exportTable('prefix_country');
exportTable('prefix_country_user');
//остальное
exportTable('prefix_reminder');
exportTable('prefix_page');
exportTable('prefix_invite');
exportTable('prefix_friend');
exportTable('prefix_favourite_topic');
?>
На мой взгляд, эти изменения, может, немного запоздалые, но совершенно необходимые. Я понимаю некоторое недовольство, но это как больной зуб, который, вроде, и не особо мешает жить, но рано или поздно им приходится заняться.
Теперь именования классов получают четкую и внятную систему именований. Не знаю, как у других разработчиков, но у меня ни разу не получилось написать имя класса сущности (entity) с первого захода. Поэтому я для себя давно уже решил, что надо упорядочить это безобразие, и если глянете сущности и мапперы админпанели, то увидите уже сейчас там такие имена классов: PluginAceadminpanel_ModuleAdmin_EntityUser или PluginAceadminpanel_ModuleAdmin_MapperAdmin. :) Рад, что Максим прислушался к моим советам.
Проблем с адаптацией плагинов я вообще не вижу. Тут Макс прав — просто немного имена классов изменить. Любые самописные, заказные, тиражируемые — абсолютно любые модули портируются на счет раз.
Например, был у нас класс PluginPage_Page, т.к. это модуль, то переименовываем его в PluginPage_ModulePage. И запускаем в ТоталКоммандоре поиск строки PluginPage_Page во всех php-файлах. Везде, где нашли, меняем эту строку на PluginPage_ModulePage. Делаем такую же замену для сущности (меняем PluginPage_PageEntity_Page на PluginPage_ModulePage_EntityPage) и для маппера (меняем PluginPage_Mapper_Page на PluginPage_ModulePage_MapperPage). Все! Вот мы целый плагин адаптирвали под новую версию! Больше не нужно ни-че-го! Трудно? Долго? Страшно?
ЗЫ Я плагин Page только для примера привел, на самом деле там уже все изменено.
маленькие советы.
убрать поля «индекс», «кому доставить» заменить на «адрес». Во вкладку «способ оплаты» вписать «Наличными курьеру», чтобы оно было первым в выборе. И сделать список категории, чтобы товары были по полочкам. К какому времени вы сделаете версию для 0.4? Уж очень вопрос остро стоит для меня :)
я обращаюсь к той аудитории, у которой хорошая посещаемость на проектах и есть, что предложить людям, магазин будет отдельной статьёй доходов для проекта, вот примеры таких проектов www.avtoturistu.ru/, robocraft.ru это с магазинами, вот к примеру проект которому не помешает магазин turometr.ru и ещё раз повторяю на выходе получится Saas платформа
<?php
// E-mail адрес нашего пользователя
$email_address = $mail;
// По умолчанию, 4 - номер группы для зарегистрированных пользователей, и
// 5 - для COPPA-пользователей(http://coppa.org).
$group_id = ($coppa) ? 5 : 4;
// Но так как ID по умолчанию может смениться, то мы обязаны предварительно сделать
// запрос к базе данных для получения идентификатора.
// Учтите, что после первого выполнения данный запрос закешируется.
$group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
$sql = 'SELECT group_id
FROM ' . GROUPS_TABLE . "
WHERE group_name = '" . $db->sql_escape($group_name) . "'
AND group_type = " . GROUP_SPECIAL;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$group_id = $row['group_id'];
// Временная зона для пользователя, в GMT формате.
$timezone = '-6';
// Язык пользователя. Указывается двухбуквенное сокрашение.
$language = 'ru';
// Тип пользователя. Может быть USER_INACTIVE или USER_NORMAL,
// в зависимости от того, нужно ли пользователю после его создания самостоятельно
// активировать свой аккаунт.
$user_type = USER_NORMAL;
// Если мы устанавливаем пользователя, как неактивного (USER_INACTIVE),
// то мы должны сгенерировать его активационный код.
// Можете использовать любой алгоритм генерации, какой только сможете
// придумать.
$user_actkey = md5(rand(0, 100) . time());
$user_actkey = substr($user_actkey, 0, rand(8, 12));
// IP-адрес пользователя.
$user_ip = $user->ip;
// Дата регистрации пользователя в UNIX-формате.
$registration_time = $time_post_added - rand(100,200);
// Причина неактивности выводится в администраторском аккаунте при
// выводе списка пользователей.
// Может быть следующей: INACTIVE_REGISTER, INACTIVE_PROFILE,
// INACTIVE_MANUAL and INACTIVE_REMIND.
// Нет необходимости указывать этот параметр, если пользователь
// станет сразу активным после регистрации.
// Время, после которого пользователь неактивен.
// То есть это фактически дата последнего входа в систему.
// Указываем текущее UNIX-время.
//$user_inactive_time = time();
$sql = 'SELECT *
FROM ' . USERS_TABLE . '
ORDER BY user_id DESC LIMIT 1 ';
$result = $db->sql_query($sql);
$user_row = $db->sql_fetchrow($result);
$now_id = $user_row['user_id'] +1;
$avatar = $path_to_avatar;
$image_size = getimagesize($avatar);
copy($avatar,"../images/avatars/upload/".$hash."_".$now_id.".jpg");
// Создаем непосредственно ассоциативный массив.
$user_row = array(
'username' => $username,
'user_password' => phpbb_hash($password),
'user_email' => $email_address,
'group_id' => (int) $group_id,
'user_timezone' => (float) $timezone,
'user_dst' => $is_dst,
'user_lang' => $language,
'user_type' => $user_type,
'user_actkey' => $user_actkey,
'user_ip' => $user_ip,
'user_regdate' => $registration_time,
'user_inactive_reason' => $user_inactive_reason,
'user_inactive_time' => $user_inactive_time,
'user_avatar' => $now_id."_".time().".jpg",
'user_avatar_type' => "1",
'user_avatar_width' => $image_size['1'],
'user_avatar_height' => $image_size['0'],
);
// Далее система все берет на себя.
// Пользователь будет автоматически добавлен в соответствующие
// таблицы в базе данных.
$user_id = user_add($user_row);
?>
по сути осталось только подгурзить нужные файлы для работы с обоими движками, ну и подправить экшен у ЖУ и функцию регистрации у BB
идем в ( classes / blocks / BlockSteam.class.php)там пишем:
class BlockStream extends Block {
public function Exec() {
if ($oTopics=$this->Topic_GetTopicsLast(BLOCK_STREAM_COUNT_ROW)) {
$this->Viewer_Assign('oTopics',$oTopics);
$sTextResult=$this->Viewer_Fetch("block.stream_topic.tpl");
$this->Viewer_Assign('sStreamTopic',$sTextResult);
}
}
}
сразу после этого идем в ( templates / skin / new / block.stream.tpl)там пишем:
В результате при создании/редактировании топика я ставлю галку на этот чекбокс, типа сделать топик vip, сохраняю, но изображение не появляется, при вторичном открытии для редактирования галки на чекбоксе нет. Что я не так сделал?
i — integer
b — boolean
f — float
s — string (или что-то еще?)
a-array
oBlog
oBlogs
aTopicId
aCacheKeys
iTopicId
sId
Вот в последней строчке префикс должен быть разным для разных сайтов, чтобы не получилась «каша». Еще раз повторюсь, для 0.3.1 — не знаю, но возможно все то же.
Просто вы фигню пишите. Можно и на ЛС магазин замутить
2. Чтобы работало с плагином рейтиг пользователей, нужно в плагине PluginUserhacks.class.php закомментировать
и в файл templates/skin/new/actions/ActionProfile/whois.tpl (уже скопированный в этот каталог из плагина круг друзей) перед строкой добавить {hook run='userhacks_whois'}
3. если вы используете плагин компании, то нужно также убрать делегирование whois.tpl, в файле PluginCompany.class.php удалив строку далее все в тот же whois.tpl добавить перед строкой
эти строки
4. Наслаждаемся симбиозом 3х плагинов =)
Конвертировать текущую 0.3.1 БД в нормальный целостный вид можно этим скриптом. Далее уже получившуюся БД конвертировать в 0.4.
вот модуль для 0.3.1
Установка:
1. скопировать
2. настроить адрес в конфиге
3. доступ по адресу сайт/feedback
Условие использования:
бесплатно при условии сохранения копирайта.
Теперь именования классов получают четкую и внятную систему именований. Не знаю, как у других разработчиков, но у меня ни разу не получилось написать имя класса сущности (entity) с первого захода. Поэтому я для себя давно уже решил, что надо упорядочить это безобразие, и если глянете сущности и мапперы админпанели, то увидите уже сейчас там такие имена классов: PluginAceadminpanel_ModuleAdmin_EntityUser или PluginAceadminpanel_ModuleAdmin_MapperAdmin. :) Рад, что Максим прислушался к моим советам.
Проблем с адаптацией плагинов я вообще не вижу. Тут Макс прав — просто немного имена классов изменить. Любые самописные, заказные, тиражируемые — абсолютно любые модули портируются на счет раз.
Например, был у нас класс PluginPage_Page, т.к. это модуль, то переименовываем его в PluginPage_ModulePage. И запускаем в ТоталКоммандоре поиск строки PluginPage_Page во всех php-файлах. Везде, где нашли, меняем эту строку на PluginPage_ModulePage. Делаем такую же замену для сущности (меняем PluginPage_PageEntity_Page на PluginPage_ModulePage_EntityPage) и для маппера (меняем PluginPage_Mapper_Page на PluginPage_ModulePage_MapperPage). Все! Вот мы целый плагин адаптирвали под новую версию! Больше не нужно ни-че-го! Трудно? Долго? Страшно?
ЗЫ Я плагин Page только для примера привел, на самом деле там уже все изменено.
стало:
убрать поля «индекс», «кому доставить» заменить на «адрес». Во вкладку «способ оплаты» вписать «Наличными курьеру», чтобы оно было первым в выборе. И сделать список категории, чтобы товары были по полочкам. К какому времени вы сделаете версию для 0.4? Уж очень вопрос остро стоит для меня :)
ну желательно еще проверить не занят ли логин
а вот программное создание юзера phpbb
по сути осталось только подгурзить нужные файлы для работы с обоими движками, ну и подправить экшен у ЖУ и функцию регистрации у BB
идем в ( classes / blocks / BlockSteam.class.php)там пишем:
сразу после этого идем в ( templates / skin / new / block.stream.tpl)там пишем:
1. В ActionTopic.class.php после:
добавил:
2. В Topic.entity.class.php после:
добавил:
и после:
добавил:
3. В Topic.mapper.class.php добавил vip сюда:
и сюда:
4. Выполнил запрос в базу:
5. В шаблоны topic.tpl и topic_list.tpl добавил:
6. В шаблон actions/ActionTopic/add.tpl добавил:
В результате при создании/редактировании топика я ставлю галку на этот чекбокс, типа сделать топик vip, сохраняю, но изображение не появляется, при вторичном открытии для редактирования галки на чекбоксе нет. Что я не так сделал?
А шаблон стандартно делегируется, про это написано.
пс: больше с up'ами не шали =)
файл в этом случае должен лежать по пути
А в классе плагина должно быть прописано делегирование примерно так:
Добавить в правый сайдбар блок PluginFilepanel_BlockCategory.
Через конфигурацию делается точно также.