0
Поднадоело уже слушать балалайку про абсолютную невозможность доработок, особенно по отношению к гибкому дао. Постараюсь ответить максимально тезисно.

1)По моим оценкам — 60-70% желаемых доработок, озвученных мне клиентами (за все время существования плагина) возможно выполнить затрагивая только шаблоны или пользуясь гибкой настройкой плагина. Каких-то сверхзнаний и телепатии не требуется, и код в шаблонах красивый, ясный, верстка вполне легкая, а в админке все весьма ясно.

2)Обладая знаниями php и зная логику livestreet (плюсом будет и понимание ORM) — наследованием, и главное — хуками, можно решить еще около трети из озвученных мне в то или иное время задач, а я всячески консультирую по возникающим вопросам при обращении в суппорт по этой теме вплоть до открытия кода определенных функций. Учитывая тот факт, что мало кто хочет чтобы доработки слетали после апгрейда — даже для полностью открытых плагинов разумные люди доработки пишут хуками и наследованием. Так что в этом нет каких-либо ужасов.

3)Есть ряд задач, которые были озвучены пользователями, реализованы и уже включены в общую поставку, а также которые готовятся. Предложив интересную общей массе покупателей задачу вполне можно получить ее к следующему мажорному релизу (или через один релиз). Таких дополнений за время существования плагина уже было много. Также по объемному дополнительному функционалу выпускаются интегрированные плагины-аддоны с расширением логики (на данный момент «маркет», но до лета будут еще — сколько зависит от времени релиза 1.0 версии движка и обстоятельств связанных с релизом).

Почему код частично закрыт — слава Богу в этот раз объяснять не нужно, вы, судя по комментам, сами все понимаете абсолютно верно.
По дополнительным интересующим вопросам я готов продолжить беседу уже по адресу support@lsmods.ru
+4
Господа недовольные покупатели шаблонов, у меня для вас плохая новость.

Нельзя создать действительно хороший проект, пытаясь набрать пул шаблонов и плагинов, собрав из этого конструктора сайт и объявить, что в результате вы получили нечто интересное, полезное и крутое. Все что вы получите — это просто набор плагинов + шаблон.
Главный тезис — все что вы здесь покупаете или скачиваете — должно восприниматья как платформа, база, фреймворк, на основе которого вы (подчеркиваю) _должны_ производить кастумизацию, дорабатывать, рефакторить, изменять структуру и привносить свои собственные идеи. Шаблон в данном случае — это концептуальная база, на основе которой необходимо реализовать свои идеи _самостоятельно_.
Данная самостоятельноть подразумевает не обязательно личное програмерство, но как минимум привличение профильных специалистов для соответсвующих задач.

То что здесь развелось нытье по поводу платности и клянченье по поводу «двухстрочечного» заголовка — просто смешно. Умные создатели сайтов должны взять (купить/скачать) неоходимый функционал, и допилить его под себя.

Вот минимальный алгоритм создания мало-мальски интересного проекта (с технической точки зрения, без учета рентабельности идеи):
1. Изучить все что есть на сайте LS;
2. Выбрать необходимый для своего проекта функционала;
3. Скачать/купить его;
4. Собрать конструктор и поиграть с ним немного;
5. Подумать и выкинуть половину этого функционала, так как он не профильный для вашего проекта;
6. Подумать и придумать _собственную_ информационную структуру, свой функционал, свои интерфейсные фишки на базе уже изученного конструктора.
7. Заказать в индивидуальном порядке (а не массовым заказом) эти доработки и внедрить их в свой проект;
8. Поиграться с полученным результатом и (вуаля!), повторить с пунтка 5! Да-да, думать об уместности и уникальности функционала надо на всех этапах.
9. Относитесь к любому купленому плагину или шаблону как к подарку судьбы, что вам так или иначе достался готовый продукт, который вы можете дальше использовать как платформу для реализации своих _собственных_ идей (а не разрабатывать эту платформу самому).
10. И на последок — не забывайте благодарить всех авторов шаблонов и плагинов, а также основателя фреймворка. Как словами, так и материально.

И напоследок, завершающий тезис: если хотите создать настоящий сайт для людей, а не очередной клонированый ГС, осознайте, — это все равно что взять и на скорость 100 км/ч взять и разбить автомобиль об стену. Ну хотя бы малолитражный, вроде матиза. Это в плане стоимости вашего _мало-мальски уникального и интересного_ проекта. После этого вам остается расслабиться и ждать результатов вашей (а не разработчиков) прозоривости: на сколько вы смогли грамотно разработать тот самый функционал для своего профильного проекта.

Нет денег на то, чтобы разбить об стену свой автомоиль ради свой мечты (а ваш проект — это ведь ваша мечта, не так ли?) — учитесь привлекать нужных специалистов под долю в проекте или просто высшим смыслом этого проекта.

Учитесь создавать такие проекты, которые смогут дать смысл разработчикам вложиться в ваш проект своей квалификцией.
+3
Тут есть некоторое заблуждение. На самом деле купить плагин, программу и прочее — невозможно, их не продают вообще. На самом деле вы приобретаете только права на использование этих продуктов, при этом в соответствии с соглашением, которое разработано разработчиком или другим правообладателем. Поэтому непонятно что же вы хотите. ))
  • avatar
  • vdenu
  • 16 ноября 2011, 12:28
0
сори
{literal}
    <script type="text/javascript">
	$.noConflict();
	jQuery(document).ready(function($) {});
    </script>
{/literal}
  • avatar
  • netlanc
  • 06 ноября 2011, 19:02
+2
9) /gallery/user/Yupi/77/1047
Еще о кривых руках. При клике по любому фото у вас на сайте оно открывается аж 2 раза. Слабо подружить 2 плагина одного автора? ;)
  • avatar
  • SkyNet
  • 22 октября 2011, 13:08
+1
Видимо, вы не в курсе, о чем говорите. Зашел на ваш сайт, с установленой галереей от экстраверта.
1) вижу категорию «Косплей» с 518-ю фото. Захожу — вижу только 3 фото.
2) на всех страницах галереи «Плагин Галерея для LiveStreet». ни разу не видел, чтобы на сайтах оставляли эту надпись по доброй воле. это о кривых руках.
3) от кнопки показа слайдшоу на вашем сайте видена только часть ее верха. если не знать ЛС-а — не понять, что за кнопка. это также о руках.
4) /gallery/category/cosplay/rating/ почему тут по 5 фоток на сранице и таких страниц 104. не от нагрузки ли? на таких страницах галерея должна генерировать тысячи запросов, которые вы никогда не исправите из-за закрытости кода и изначально «корявой» планировке архитектуры (600 фото на моем сайте генерировали более 3000 запросов при открытии страницы).
5) не огласите, сколько тут запросов у вас? /profile/Yupi/
6) на вашем сайте используется шаблон social. автор шаблона скорее всего отказался выводить дополнительную информацию о каждой фото т.к. в некоторых браузерах она накладывается одна на другую. экстраверт где-то год назад обещал это исправить.
7) функцию отметки пользователей тестили в разных браузерах? квадратик вместо фото при 1-й загрузке страницы не наблюдюдали (опера, ие)?
8) /gallery/tags/Cosplay/ по приближенному подсчету тут должно показываться не менее пары сотен фото, а всего 15.

По поводу заброшенности плагина. Глюки сначала не правились, затем были зашифрованы, нового функционала не добавлено за все время, пока галереей занимался экстраверт. С выходом ЛС 0,5 автор пообещал пофиксить баги в 0,4,2 и обновить до 0,5. Не сделал ни того ни другого, а занялся разработкой другого плагина.

BayBuKu, слабо без пустозвонства конструктивно ответить?

Все вышеописанные баги не относятся к плагину PicAlbums.
  • avatar
  • SkyNet
  • 22 октября 2011, 13:01
+2
Хотелось бы возможность выводить на главную страницу или в любое другое место, например в sidebar, информер с последними материалами из разделов DAO модуля.
Чтобы можно было реализовать примерно следующее:
+2
Добавить в config.local.php
$config['router']['uri']['~^about$~i'] = "page/about";
  • avatar
  • ort
  • 14 сентября 2011, 18:25
0
пользуюсь похожей конструкцией еще с плагина livestreet.ru/blog/6030.html
public function Activate() {
		if (!$this->isFieldExists('user_soccom')) {
			$this->ExportSQL(dirname(__FILE__).'/dump.sql');
		}
    return true;
	}

	public function Init() {

  }

  protected function isFieldExists($sFieldName) {
		$sQuery="SHOW FIELDS FROM ".Config::Get('db.table.user');
    $return = false;
    if ($aRows=$this->Database_GetConnect()->select($sQuery)) {
      foreach ($aRows as $key => $aRow){
        if ($aRow['Field'] == $sFieldName){
          $return = true;
        }
      }
      return $return;
		}
		return false;
	}

еще, бы хорошо было бы чтобы использовали конструкцию типа
$a1 = Config::Get('block.rule_index_blog.blocks.right');
$a2 = array('adunits'=>array('params'=>array('plugin'=>'adunits'), 'priority'=>10));
Config::Set('block.rule_index_blog.blocks.right', array_merge ($a1, $a2));
для подключения блоков в слайдбар, ибо при установке нескольких плагинов пересекающиеся блоки могут затираться
  • avatar
  • netlanc
  • 04 марта 2011, 01:56
0
Отлично всё работает, спасибо xyz =)

И так, у меня установлен плагин Blogs Autoconnect Plugin, и чтоб его заставить выводить список блогов по алфавиту, надо отредактировать Autoconnect.mapper.class.php

Топаем в /plugins/autoconnect/classes/modules/autoconnect/mapper/Autoconnect.mapper.class.php 37строка

Находим код

		$sql = "SELECT
					b.blog_id
					FROM
						".Config::Get('db.table.blog')." as b
					WHERE
						(b.user_owner_id = ? AND b.blog_type <> 'personal')
						OR
							(b.blog_type = 'open' 
							AND 
							b.user_owner_id <> ?
							AND 
							b.blog_limit_rating_topic <= ?
							)
						OR
							(b.blog_type = 'close' 
							AND 
							b.blog_id IN (SELECT bu.blog_id FROM ".Config::Get('db.table.blog_user')." AS bu WHERE bu.user_id = ? AND bu.user_role IN (?a))
							AND 
							b.blog_limit_rating_topic <= ?
							)
					";


И в конце добавляем ORDER by b.blog_title asc

		$sql = "SELECT
					b.blog_id
					FROM
						".Config::Get('db.table.blog')." as b
					WHERE
						(b.user_owner_id = ? AND b.blog_type <> 'personal')
						OR
							(b.blog_type = 'open' 
							AND 
							b.user_owner_id <> ?
							AND 
							b.blog_limit_rating_topic <= ?
							)
						OR
							(b.blog_type = 'close' 
							AND 
							b.blog_id IN (SELECT bu.blog_id FROM ".Config::Get('db.table.blog_user')." AS bu WHERE bu.user_id = ? AND bu.user_role IN (?a))
							AND 
							b.blog_limit_rating_topic <= ?
							)
							ORDER by b.blog_title asc
					";


Всё. Сортировка по алфавиту готова.
PS. Для админа сортировка не работает. Я не стал париться. Но решение есть тут
  • avatar
  • Loci
  • 24 января 2011, 17:30
0
2) нужно проверить, что содержит переменная $sFileClass

3) в экшене сделать
$this->Viewer_Assign('sTemplatePathPlugin',rtrim(Plugin::GetTemplatePath(__CLASS__),'/'));
далее в шаблоне
{include file="$sTemplatePathPlugin/name.tpl"}
  • avatar
  • ort
  • 14 июня 2010, 16:21
+2
Проблема в не целостности базы, возможно она была 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');

?>
  • avatar
  • ort
  • 30 мая 2010, 22:13
+2
Почитал топик и комментарии… У меня история очень похожая и проблемы те же самые.
Немного информации: сайту чуть меньше года, регион — Казахстан, тематика общая, зарегистрировано немногим более 500 человек.

Сейчас я самый активный автор на своем сайте, я много пишу (копи-паст и не только) и много комментирую. После моих сообщений как-то повышается посещаемость за счет поисковиков. Но народ остается очень пассивным, костяк сайта растет очень медленно.

Дополнительные модули работают очень слабо, если точнее, то Афиша вообще не работает, я так и не смог заставить/привлечь арт-директоров заведений оставлять анонсы, а самим юзерам это не надо.
Галерея почти не работает, очень редко там кто-то что-то размещает и еще реже комментирует.
Микроблоги боле-менее работают.

Блогость есть, социальности пока мало. Уверен, что сообща мы сможем найти какое-то решение проблемы. Уверен, что многое зависит от функциональности. Первое, что буду делать после перехода на 0,4 — подключать авторизацию/регистрацию через openID и прикручу кнопочки публикации в твиттере, фейсбуке, вконтакте. Правда в том, что надо не убегать от социальных монстров, а их использовать.

Функционал дружбы и профилей наверное нужно как-то расширять. Давайте делится идеями!!!
  • avatar
  • MOTOP
  • 21 мая 2010, 21:50
+5
По своему опыту скажу, что есть два способа адаптации модуля под 0.4:

1) Оставить его, как «модуль», просто обеспечив его работоспособность под новым релизом
2) Практически переписать его, оформив в виде «плагина»

Путь первый — быстрее. Но он не очень правильный. Путь второй — правильный, но гораздо более трудоемкий. Только начиная переписывать «модули» в «плагины» я ошибся в своих прогнозах относительно трудоемкости в разы.

Я понимаю, что клиентам все эти рассуждения «до лампочки», и их, по большому счету, мало волнуют проблемы разработчиков. Но, надеюсь, хоть какое-то понимание мои пояснения внесут.

ЗЫ «Мопед не мой, я просто дал объяву» ©…
Т.е. я — не Кирилл, а просто кое-что пояснил. :)
  • avatar
  • avadim
  • 19 мая 2010, 12:51
+1
В первых строках php ругается на то, что используемые функции устарели...
Не-а, не сами ф-ции устарели, а устарел синтаксис вовзврата значения по ссылке. Т.к. в PHP5 объекты всегда передаются по ссылке (в т.ч. и в возврате функций), то правильней будет просто убрать & из такой конструкции:
$object =& new $class(...);
  • avatar
  • avadim
  • 03 марта 2010, 18:13
+6
3 варианта решения проблемы:
1. отключить в feedburner добавления параметров
2. добавить в RSS ленту слеш после "/123.html", т.е. должно быть "/123.html/"
3. в ActionBlog изменить регулярное выражение
$this->AddEventPreg('/^(\d+)\.html$/i','EventShowTopicPersonal');
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html$/i','EventShowTopic');
на
$this->AddEventPreg('/^(\d+)\.html(\?.*)?$/i','EventShowTopicPersonal');
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html(\?.*)?$/i','EventShowTopic');

  • avatar
  • ort
  • 16 января 2010, 12:32
0
1)http://learn.iis.net/page.aspx/460/using-url-rewrite-module/ качаем ставим
2)http://learn.iis.net/page.aspx/557/translating-htaccess-content-to-iis-webconfig/
3)пишем свой рул так как путем learn.iis.net/page.aspx/470/importing-apache-modrewrite-rules/
импорта работать не будет

4) не забываем про define('SYS_OFFSET_REQUEST_URL',1);
и про права для папока в системе

5) получаем долгожданный web.config


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="false" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^arkanar\.org$" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="http://www.arkanar.org/{R:1}" />
    </rule>
    <rule name="Imported Rule 2" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="false" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
      </conditions>
      <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>
</system.webServer>
</configuration>


И будет счастье!
  • avatar
  • it_
  • 09 сентября 2009, 13:42