PDA

Zobacz pełną wersję : atom sms - płatny dostęp do materiałów



myshol
23-10-2010, 10:15
Witam!

W swoim serwisie postanowiłem wdrożyć płatny dostęp do wybranych materiałów. Wybór padł na atomsms.pl ponieważ oferują gotowe pluginy dla joomla!:
http://www.atomsms.pl/opisy/sms-dostep/joomla/1.5.x/

Jednak ten plugin ma mały mankament - po wejściu do płatnego artykułu nie pokazuje się jego wstęp, tylko od razu informacja o płatności. Uważam, że nad tabelą z cennikiem sms powinien znaleźć się wstęp artykułu.

Jak dokonać odpowiednich zmian, żeby to poprawić? Czy ktoś ma już jakieś doświadczenia w tym temacie?

Domyślam się, że zmodyfikować należy plik sms-dostep-j15.php w folderze plugins/content, ale jak dokładnie go zmienić?

kurtz
23-10-2010, 10:28
ja myślę, że pisz do ich programistów. niech reagują na sugestie klientów. jak już zrobią poprawkę to daj wszystkim znać.

myshol
23-10-2010, 11:20
Tak, dokładnie od tego zacząłem :)

Ale usłyszałem, że jeśli umiem to mogę sobie to sam zrobić :) oni nie mają tego raczej w planach.

kurtz
23-10-2010, 12:15
o, czyli nie będą krzyczeć jak ktoś pogrzebie w ich kodzie ?

dla mnie bomba, co prawda integracja w innym zakresie, ale ... pasi

myshol
23-10-2010, 16:58
Zatem skoro wolno grzebać w kodzie to grzebiemy :)

Plugin (do pobrania tutaj (http://www.atomsms.pl/content/joomla15-atomsms-dostep.zip)) składa się raptem z 3 plików:
plugins/content/atomsms-dostep.php
plugins/content/atomsms/sms-dostep-j15.php
plugins/content/atomsms-dostep.xml

Najwazniejsze są pierwsze dwa, a w atomsms-dostep.php znaleźc można taki kod:


if($paid) { // oplacone
$row->text = preg_replace('/\{sms-dostep[^}]*\}/', '', $row->text);
}
else { // nie oplacone
$row->text = sms_dostep_pokaz($strefa, $row->title);
}
Czyli interesuje mnie funkcja sms_dostep_pokaz wyświetlająca informacje przed zakupem artykułu. Nad formularzem chcę dodać wstęp tegoż tekstu.

Odszukuję funkcję sms_dostep_pokaz w pliku sms-dostep-j15.php i tam mamy:


function sms_dostep_form($zone, $title) {

$html = "
<style type='text/css'>
#atomsms { width: 400px; background: #f0f0f0; margin: auto; text-align: left; border: 1px solid silver; padding: 10px 20px; background: white; }
#atomsms * { font-family: verdana,sans-serif; font-size: 12px; color: #444; }
#atomsms h1 { font-family: \"Trebuchet MS\",sans-serif; font-size: 27px; font-weight: normal; color: #47a; margin: 0 0 15px 0; text-align: center; }
#atomsms p { margin: 4px 0 0 0; clear: both; }
#atomsms .premium { border-left: 6px solid #BF1A16; background: #F6F6F6; margin: 5px 0 15px 0; padding: 6px; width: 380px; }
#atomsms p.conn { margin: 20px 0 20px 0; text-align: center; }
#atomsms p.foot { margin-top: 30px; text-align: center; }
#atomsms p.foot img { margin: 5px; }
#atomsms .err { font-weight: bold; color: red; }
</style>
<div id='atomsms'>
<form name='code' action='{$_SERVER['REQUEST_URI']}' method='post'>
<h1>Strefa płatna</h1>
<p>Artykuł <strong>$title</strong> należy do strefy płatnej, do której wejście wymaga wysłania SMSa.</p>";
foreach($GLOBALS['sms-access-tariff'] as $onetariff) {
eregi('^([0-9]{1,2})(D|H|M)(.*)$', $onetariff, $regs);
list($foo, $tariff, $mode, $time) = $regs;
$mode = strtoupper($mode);
switch($mode) {
case 'D': $tv = floor(time() / 86400); $tn = 'dni'; break;
case 'H': $tv = floor(time() / 3600); $tn = 'godzin'; break;
case 'M': $tv = floor(time() / 60); $tn = 'minut'; break;
}
$h = md5($GLOBALS['sms_dostep_prefix'].$tariff.$mode.$tv.$zone.$GLOBALS['sms_dostep_test'].$GLOBALS['sms_dostep_klucz']);
$pars = "p={$GLOBALS['sms_dostep_prefix']}&amp;r={$tariff}&amp;i=msg-{$onetariff}&amp;m={$mode}&amp;t={$tv}&amp;f={$zone}&amp;s={$GLOBA LS['sms_dostep_test']}&amp;h=$h&amp;c={$GLOBALS['sms_dostep_kodowanie']}";
$html .= "\n<p>Dostęp na czas <b>{$time} {$tn}</b>:</p>\n";
$html .= "<div class='premium'>\n";
$html .= "<div id='msg-$onetariff'><p class='conn'>Łączenie z serwerem, proszę czekać...</p></div>\n";
$html .= "<script type='text/javascript' src=\"http://app.atomsms.pl/sms-access.php?$pars\"></script>\n";
$html .= "</div>\n";
}
if(isset($GLOBALS['sms-access-err'])) $html .= "<p class='err'>{$GLOBALS['sms-access-err']}</p>\n";
$html .= "
<p align='center'>
Tu wpisz kod otrzymany SMSem:<br />
<input type='text' name='sms-access-code-".sms_dostep_safestr($zone)."' />
<button type='submit'>Wejdź</button>
</p>
</form>
<p class='foot'>Płatności SMS obsługuje<br /><a target='_blank' href='http://www.atomsms.pl/' title='Dostęp SMS'><img width='120' height='23' alt='Dostęp SMS' src='http://www.atomsms.pl/img/logo120x23.png' border='0' /></a></p>
</div>
";
//header('Content-Type: text/html; charset='.sms_dostep_enc());
return sms_dostep_encode($html);
}

Pomijając definicję stylów w środku dokumentu prowadzącą do błędu walidacji wnioskuję, że korzystając z funkcji wbudowanych w Joomla! można dołączyć wstęp artykułu do zmiennej $html. Nie bardzo wiem jak do tego się zabrać.

A może poszedłem zupełnie złym tropem?

Dla przykładu wdrożyłem sobie plugin tutaj: http://www.nad-bugiem.com/
Przykład artykułu z pluginem: http://www.nad-bugiem.com/kultura/na-ludowo/90-metody-konserwowania-grzybow

Jak widać, na głównej wstęp jest widoczny, ale po wejściu w materiał już nie. To uważam jest duża niedogodność ponieważ utrudnia zaczytanie materiału przez roboty wyszukiwarek i jest średnio zachęcające dla potencjalnych klientów.


Jeszcze udało mi się znaleźć opis modułu ze wstępem aktualnego artykułu:
http://nodwell.net/in-dev/extension-article-intro
Może stąd uda się wykorzystać jakiś kod?

---------- Post dodany o 16:58 ---------- Poprzedni post był o 13:03 ----------

Rozwiązanie okazało się prostsze niż myślałem.

W pliku atomsms-dostep.php pobierane są parametry wybranego artykułu więc dopisujemy składnię pobierającą też wstęp. wtedy wygląda to następująco (linia 76):


if($paid) { // oplacone
$row->text = preg_replace('/\{sms-dostep[^}]*\}/', '', $row->text);
}
else { // nie oplacone
$row->text = sms_dostep_pokaz($strefa, $row->title, $row->introtext);
}
Ponieważ dodajemy do funkcji nowe parametry musimy w pliku sms-dostep-j15.php zmienić jej definicję i przekazywane dalej parametry (u mnie linia 54):



function sms_dostep_pokaz($strefa='', $tytul='', $art_int) {
return sms_dostep_form($strefa, $tytul,$art_int);
}
Wtedy możemy zmodyfikować już ostatecznie funkcję sms_dostep_form, która u mnie wygląda następująco (podaję tylko ten fragment gdzie coś zmieniałem - około linii 77):



function sms_dostep_form($zone, $title, $art_intro) {

$html = $title . "<br /><br />";

$html .= $art_intro;

$html .= "
I od tej pory można się cieszyć wstępem artykułu nad formularzem płatności.

Prawdopodobnie dało się to zrobić lepiej i ładniej :) ale działa :)