PDA

Zobacz pełną wersję : Jak zmodyfikować "wyślij artykuł" aby autor nie miał wyboru sekcji i kategorii?



jokrasa
16-12-2009, 21:59
Witam wszystkich.

Korzystam z joomla 1.5.15

Szukałem długo prostego komponentu typu: dodaj artykuł lub pytanie na stronę przez zarejestrowanego użytkownika i nic prostego - w polskiej wersji nie znalazłem.

Wiadomo, że standardowo zarej. użytk. nie może dodawać artykułów, a opcję tą ma autor. Więc, u mnie wszyscy którzy będą się rejestrować otrzymają statut autora.

W związku z tym postanowiłem zmodyfikować lekko edytor, który pojawia się dla autora.

Nie chciałbym aby autor miał możliwość wybieranie sekcji i kategorii oraz miał zablokowaną możliwość dodawania obrazków (link do obrazków mogę usunąć i z tym nie mam problemu) . To chciałbym ustawić na stałą sekcję kategorię, gdzie przyporządkowałbym ID sekcji i ID kategorii na stałe.

Dotarłem do pliku form.php w katalogu com_content\views\article\tmpl\ , gdzie w tabeli (załącznik numer 2) są skrypty odpowiedzialne za wywołanie listy sekcji i kategorii (załącznik nr1). Tylko jak wklepać na sztywno ID konkretnej sekcji i kat. i aby się owa lista nie pokazywała ?

Mogę usunąć wiersze z tabeli z wyborem sekcji i kategorii, ale wtedy artykuł nie zapisze się bo nie wybrano sekcji.

Z tym mam problem duży. Nie jestem specjalistą od php, więc może ktoś przyjazny by mi pomógł ?

Pozdrawiam.

Jola
17-12-2009, 05:45
Witam,
za wyświetlanie selecta sekcji i kategorii w pliku form.php odpowiadają pozycje:

echo $this->lists['sectionid'];
.....
echo $this->lists['catid'];Najprościej zamiast listy wstawić pole ukryte z wpisanymi na "sztywno" wartościami sekcji i kategorii.
Warto dodać warunek powodujący takie uktycie tylko dla wybranej grupy. W kodzie gid to id z tabeli jos_core_acl_aro_groups (autor=19).
Zamiast:

<?php echo $this->lists['sectionid']; ?>Wstaw (value="1" gdzie 1 to id sekcji)

<?php
$user = &JFactory::getUser();
if ($user->get('gid') ==19){
?>
<input type="hidden" name="sectionid" value="1">
<?php
}
else{
echo $this->lists['sectionid'];
}
?>Zamiast

<?php echo $this->lists['catid']; ?>wstaw (wybrane catid=1)

<?php
if ($user->get('gid') ==19){
?>
<input type="hidden" name="catid" value="1">
<?php
}
else{
echo $this->lists['catid'];
}
?>

PeFik
17-12-2009, 13:16
Szukałem długo .... - w polskiej wersji nie znalazłem.

Bo źle szukałeś, hihi. Modyfikacja kodu jest "słabym" rozwiązaniem i przy kolejnej aktualizacji na 50% o niej zapomnisz.

Zatem, Rzuć okiem na wpis: http://blog.elimu.pl/?p=1687

Jola
17-12-2009, 13:32
Modyfikacja kodu jest "słabym" rozwiązaniem i przy kolejnej aktualizacji na 50% o niej zapomnisz.

Dlatego wymyślono metodę nadpisywania szablonów. :)

zwiastun
17-12-2009, 14:23
Gwoli dojaśnienia:
Rozwiązanie podane przez @jolaass jest kompletne i w pełni bezpieczne! W katalogu swojego szablonu tworzymy podkatalog /html/com_content/article/ i kopiujemy do niego oryginalny plik form.php z katalogu /components/com_content/views/article/tmpl/.
W tym skopiowanym pliku dokonujemy zmian opisanych przez @jolaass, dzięki czemu w wyniku aktualizacji Joomla! nasze zmiany nie zostaną zniszczone.

PS Będę wielce zobowiązany za uczestnictwo w forum podyktowane głównie chęcią pomocy użytkownikom Joomla!, a nie autopromocji!

PeFik
17-12-2009, 15:25
rozumiem, że ów PS było do mnie. Aczkowiek jak można zauważyć podałem linka do wskazówki, nie było zatem sensu kopiować treści.

jokrasa
17-12-2009, 20:30
Witam.

- jolaass

Dzięki za pomoc i konkretne przykłady. Już zabieram się do pracy/zmian.

- PeFik

Dzięki, Twoją propozycję komponentu JE Story Submit również rozważę - przetestuję, i myślę po przeczytaniu wzmianki, że to coś co mogę potrzebować. Aczkolwiek, jestem za lekkimi zmianami istniejących komponentów/modułów do granic ich funkcjonalności.
Dzięki raz jeszcze.

MotyF
03-01-2010, 16:07
Jolaass - świetna robota, mam do Ciebie jedna prośbę. Potrzebuje wg. Twjego przykładu zrobić jeszcze jeden trik. Każdy artykuł jest automatycznie opublikowany (w ukrytej sekcji), żeby userzy go widzieli a admin będzie tylko przenosił do odpowiedniego działu. Czyli każdy kto napisze ma automatycznie (z ukrycia) opublikowany artykuł i nie ma możliwości ustawienia strony głównej. Z góry dzięki

Jola
03-01-2010, 17:04
To może krótko: za wybór opublikowane czy nie odpowiada wpis:

<?php echo $this->lists['state']; ?>zastępujemy (opublikuj: value=1; nie publikuj value=0):

<input type="hidden" name="state" value="1">za stronę frontową:

<?php echo $this->lists['frontpage']; ?>zastępujemy (na frontowej: value=1; nie na frontowej value=0):

<input type="hidden" name="frontpage" value="0">Przypominam o oczywistej oczywistości :) - zastosować metodę nadpisywania szablonów

MotyF
03-01-2010, 17:05
No właśnie tak zrobilem, nadpisałem szablon, użyłem dokładnie tego, o czym piszesz i do bazy trafiają z zerem (niepublikowane) i nie wiem dlaczego.

A dokładniej wpisałem:


<?php
if ($user->get('gid') ==19){
?>
<input type="hidden" name="state" value="1">
<?php
}
else{
echo $this->lists['state'];
}
?>

tym wpisem zastapiłem


<?php echo $this->lists['state']; ?>

Chyba wiem, dlaczego tak się dzieje, poprostu autor (grupa) nie może i tyle :) Ustawiłem wszystko tak samo tylko zmieniłem 19 na 21 (autor na publisher) a swojemu userwoi nadałem grupę 21-publisher i zadziałało. Inputa typu radio nie było a pomimo tego automatycznie opublikowało.

PS. Jak dodać możliwość wysyłania artykułów grupie 18-registered?

Jola
03-01-2010, 18:10
No tak, zapomniałam o uprawnieniach - standardowo możliwość wyboru czy artykuł ma być publikowany pojawia się dopiero od Wydawcy. Ale jeśli nawet "zmusimy" formularz do wysyłania tej informacji przy niższych uprawnieniach w innym miejscu kod Joomla domyślnie nowe artykuły napisane przez Autora czy Redaktora zapisuje jako nieopublikowane.
Zaznaczam, że nie jestem na bieżąco w temacie uprawnień związanych działaniami użytkowników na artykułach - możliwe, że są inne rozwiązania.
Moja propozycja jest taka.
Podany kod:

<?php if ($this->user->authorize('com_content', 'publish', 'content', 'all')) : ?>
<tr>
<td class="key">
<label for="state">
<?php echo JText::_( 'Published' ); ?>:
</label>
</td>
<td>
<?php echo $this->lists['state']; ?>
</td>
</tr>
<?php endif; ?>zawiera warunek - wyświetla się tylko dla uprzywilejowanych. Zamiast niego wpisać tylko:
<input type="hidden" name="state" value="1">
NAstępnie w pliku components/com_content/models/article.php linia 333 jest

if ($isNew)
{
// For new items - author is not allowed to publish - prevent them from doing so
$article->state = 0;
}proponuję zmienić na

if ($isNew)
{
// For new items - author is not allowed to publish - prevent them from doing so
if ( $user->get('gid') == 19 ){
$article->state = 1;
}
else {
$article->state = 0;
}
}gdzie 19 to id grupy wybrańców.

MotyF
03-01-2010, 18:45
Dziękuje-zaraz wypróbuje, ale prosze jeszcze o info jak zmienić, aby grupa registered mogła wysyłać artykuły. Dziękuje

Jola
03-01-2010, 18:53
Najlepiej w Konfiguracja witryny->System->Użytkownicy zaznaczyć potrzebną grupę, a już zarejestrowanych przypisać do grupy bardziej uprzywilejowanej.

MotyF
03-01-2010, 19:12
Najlepiej w Konfiguracja witryny->System->Użytkownicy zaznaczyć potrzebną grupę, a już zarejestrowanych przypisać do grupy bardziej uprzywilejowanej.

Tak, wiem, ale czy nie można po prostu dodać w jakiś sposób grupie registered praw do pisania?

Jola
03-01-2010, 19:29
Chyba nie doceniasz Joomla! To, czy użytkownik ma uprawnienia do podjętych działań, jest sprawdzane wielokrotnie (w wielu miejscach kodu). Dlatego w celu zarządzania uprawnieniami używa się specjalnych komponentów (dodatków). Jak już pisałam - to nie moja specjalność, musisz poszukać na forum - temat poruszany wiele razy. :)

MotyF
03-01-2010, 19:33
Niestety, sposób na autopublikację nie działa.

W pliku form.php mam:


<tr>
<td class="key">
<label for="state">
<?php echo JText::_( 'Published' ); ?>:
</label>
</td>
<td>
<?php
$user = &JFactory::getUser();
if ($user->get('gid') ==19){
?>
<input type="hidden" name="state" value="1">
<?php
}
else{
echo $this->lists['state'];
}
?>
</td>
</tr>

a w pliku article.php


$isNew = ($article->id < 1);
if ($isNew)
{
// For new items - author is not allowed to publish - prevent them from doing so
if ( $user->get('gid') == 19 ){
$article->state = 1;
}
else {
$article->state = 0;
}
}

user ma grupę editor (19) i nadal po zapisaniu artykuł jest jako nieopublikowany.

Nie powinno być $article->state == 1; ? /edit jednak nie równa się a jest równy ma inne znaki przecież :)

Jola
03-01-2010, 19:47
Mogę napisać tylko, że zanim podam rozwiązanie na forum - testuję.
U mnie działa.

MotyF
03-01-2010, 19:50
U mnie zmiana

if ($isNew)
{
// For new items - author is not allowed to publish - prevent them from doing so
$article->state = 0;
}

na 1 nie daje rezultatu, chyba całkiem namieszałem. Proszę wyślij mi na PW te 2 swoje pliki do porównania (z góry dziękuje).

Jola
03-01-2010, 20:01
Czy Twoja akcja dotyczy tworzenia nowego pliku?
Podany kod umożliwia zapisanie nowego artykułu (jest tworzony jako nowy) jako opublikowanego, jesli artykuł jest modyfikowany - zapisuje się jego wcześniejsze ustawienie dotyczące publikacji (jak był nieopublikowany - to tak zostaje). Zmiana tego wymaga modyfikacji innego kawałka kodu.

MotyF
03-01-2010, 20:08
Dotyczy nowego pliku. Mam dział "poczekalnia" gdzie każdy może napisać. Administrator lub ktoś z "góry" wysyła plik do odpowiedniego działu. Automatycznie artykuły zapisywane są w sekcji "poczekalnia". Dlatego muszą być widoczne opublikowane) aby ich nie dublować.

Jola
03-01-2010, 21:38
To pozostaje jeszcze jedna możliwość - masz włączony jakiś dodatek (plugin), który zmienia wcześniej wpisaną wartość.

coliberek1
01-05-2010, 21:36
Bardzo dziękuję @jolaas za wytlumaczenie sprawy ustawienia domyslnej sekcji i kategorii dla autorów.

Pozdrawiam.

tomsson
11-08-2010, 22:39
a jak zrobic zeby niezarejestrowani mogli tez wysylac artykuly ?

moje
11-08-2010, 22:47
Utworzyć łącze w menu, które prowadzić do formularza artykułu, ustawić to łącze, żeby dostęp miał każdy.

Polecam czytać, nie po to powstało wiki.joomla.pl, żeby każdy z najbardziej błahym pytaniem przychodził na forum, bo wtedy zginęło by.

tomsson
12-08-2010, 14:43
no własnie mam to ustwione i dalej mam taki komunikat
"Nie masz uprawnień, by zobaczyć tę część witryny."

---------- Post dodany 12-08-2010 o 13:17 ---------- Poprzedni post był 11-08-2010 o 22:41 ----------

dziś walcze dalej z tym tematem.
Tworze nowa pozycje menu,
linkuja ją jako wyslij artykuł, (domyslnie jest ustawione publiczny dostep)
upubliczniam menu, Odpalam strona, wchodze do tego menu i nie moge wyslac artykulu, bo man ten komunikat. Menu stworzone domyslnie jest z dostepem publicznym , nic nie zmienialem, wiec jest publiczny, a mimo to nie mam jako publiczny dostepu - dziwne.
OT
Dzisiaj nie mogelm zalogowac sie na login i haslo do PA, musialem robic sztuczke z nowym haslem dla admina. Takie cos doswiadczylem juz nie pierwszy raz :/ oco kaman?

---------- Post dodany o 13:43 ---------- Poprzedni post był o 13:17 ----------

no zauwazylem ze autorzy maja dostep. co co kaman ?

moje
12-08-2010, 14:51
A dostępność modułu z tym menu tez jest na publiczny czy może specjalne?

tomsson
12-08-2010, 15:59
powszechny :/

Jola
12-08-2010, 22:23
Witam,
co innego mieć uprawnienia do pozycji menu, a co innego dostęp do komponentu (opcji komponentu).
@tomsson - przeczytaj uważnie ten wątek od początku.