私はJoomla初心者なので、これが簡単な問題であることを願っています。
J2Store 3.3.0を使用するJoomla 3.8.11 Webサイトがあり、クライアントはSKU値を製品エイリアスに追加したいと考えています。具体的には、エイリアス生成手順を次のようにしたい
make alias based on title in the usual way;
if (SKU is set):
append SKU to the alias;
check for duplicates in the usual way;
他のすべてが同じように動作することを望みます。エイリアスが自動的に生成されるときに、エイリアスに値を追加するだけです。これを行う簡単な方法はありますか?
これまでに試したこと:
私はMVCコンポーネントのチュートリアルを見ていて、JModelAdminをサブクラス化してから、save()関数をオーバーライドしています。彼らの状況は私のものよりも多くの変更があるため、私が正確に何が必要かを確認することは困難です。さらに、J2Storeはf0fに基づいているため、代わりにF0FModelを使用します。
私が見つけたのは、F0FModelをサブクラス化するJ2StoreModelOptionsというクラスです。
./administrator/components/com_j2store/models/options.php
save($ data)関数を使用して、変更する必要があるかもしれません。しかし、関数の本文にコンソールメッセージを追加しましたが、記事の編集ページで[保存]をクリックしてもログに記録されないため、適切な場所にいない可能性があります。誰かがより簡単な方法を知っている場合、または私が何か間違っていることを知っている場合、それは非常に役立ちます。 (J2Storeにサポートリクエストを送信しましたが、別のタイムゾーンにいるので、この問題をできるだけ早く解決したいと思います。応答を聞いた後も、まだサポートが必要です)
いいえ、これには簡単な方法はありません。少なくとも、simpleは、ここのすべての人にとって多くのことを意味します。ただし、これについていくつかの良い方向性を示します。
まず、J2Storeには、単純な製品、可変製品、構成可能な製品、柔軟な製品などがあります。それで、それは簡単だとどう思いますか?次に、記事を処理するコンテンツコンポーネントがあります。非常に複雑なコンポーネントです。J2Storeは、少なくとも10種類以上のデータベーステーブルを持つ非常に複雑なコンポーネントです。
エイリアスフィールドを作成しているコンテンツコンポーネントのコアファイルをオーバーライドするだけの場合は、次のJoomlaの更新時にそのオーバーライドが失われます。そうしない方が良いです。 したがって:
1。コンテンツプラグインを作成する必要があります(Google:Joomla 3のコンテンツプラグインを作成する)。また、このリンクにアクセスしてください: https: //docs.joomla.org/J3.x:Creating_a_Plugin_for_Joomla
2。記事のエイリアスフィールドは、コード内の_yourjoomla/administrator/com_content/models/article.php file
_の周りの_line 642.
_に作成されます(これはまだ簡単に見つけることができます。まあ、誰かがこれを探す場所を知っている場合。ただし、ここでかなり混乱させることができますが、注意してください)。
3。プラグインはonContentBeforeSave
イベントで動作する必要があります。したがって、関数はそのイベントで動作する必要があります。または、J2Storeプラグインを作成して、記事の作成時にskuの作成を処理したい場合も同様に実行できます(2つの異なるコンポーネントがここで機能しています)。したがって、どのアプローチを使用する必要があるかを理解するのは少し複雑です。ただし、コンテンツプラグインの方が適していると思います。
4。_database->j2store products, variants
_などのテーブルを取得する関数を作成し、_product_sku
_に等しい_product_source_id
_に基づいてこれらのテーブルからの製品データ(_article_id
_など)、および_variant_id
_のクエリに参加sku
バリアント製品からバリアントテーブルへ、クライアントがこれらの種類の製品を持っている場合(可能です)。
5。$db = JFactory::getDbo();
行を使用すると、$query = $db->getQuery(true);
でクエリオブジェクトを作成してデータを取得できます。ここで少し検討する必要があります: https://docs.joomla.org/Selecting_data_using_JDatabase
だから、あなたは上記を組み合わせて完了するだけです:)私はあなたにプロジェクトの幸運を祈り、あなたからより高い給与を求めることができますこのプロジェクトのクライアント。 :)
私があなたがあなたの特別なプロジェクトを始める方法についていくつかの光を手に入れるのを助けてくれたことを願っています(ただし、上記はタスクの完全なリストではありませんが、それは非常に速いスケルトンです)。